1

使用 添加数字XSL时,使用 显示结果exponent。例如,如果ProductID1111

<xsl:value-of select="@ProductID + 1000000"/>

它显示类似于1.1111E6,但是我希望结果是1001111

谢谢。

4

2 回答 2

1

您可能正在使用非模式感知转换,因此@ProductID 的值是无类型的,这意味着当您进行算术运算时,结果是 xs:double。如果你做了整数算术:

xs:integer(@ProductID) + 1000000

结果将是一个 xs:integer 并且会这样输出。

在 XPath 1.0 中,所有算术都是 xs:double 算术,但是数字到字符串的转换规则通过要求将“整数”作为整数输出来隐藏这个事实。

于 2012-05-30T14:59:38.060 回答
1

您似乎正在使用 XSLT 2.0 处理器(我正在使用的所有 5-6 个不同的 XSLT 1.0 处理器都会产生想要的答案 - 1001111.

使用 XSLT 2.0 处理器,只需转换@ProductIDxs:decimal

<xsl:stylesheet version="2.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:xs="http://www.w3.org/2001/XMLSchema">
 <xsl:output method="text"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="/*">
     <xsl:value-of select="xs:decimal(@ProductID) + 1000000"/>
 </xsl:template>
</xsl:stylesheet>

当此转换应用于以下 XML 文档时:

<t ProductID="1111"/>

产生了想要的正确结果:

1001111

请注意

使用xs:decimal(someNumber)构造函数和十进制算术保证结果的最大精度,以防万一someNumber可以有一个非整数值。

该类型xs:decimal是 的基本类型xs:integer,即 anyxs:integer也是xs:decimal,因此此解决方案也适用于任何整数值。

于 2012-06-15T16:06:29.730 回答