XSL显示带有指数的结果

时间:2012-05-30 12:28:12

标签: xslt

使用XSL添加号码时,会显示exponent的结果。例如,如果ProductID1111

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

它显示1.1111E6之类的内容,但我希望结果为1001111

感谢。

2 个答案:

答案 0 :(得分:1)

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

xs:integer(@ProductID) + 1000000

结果将是xs:integer,并将按原样输出。

在XPath 1.0中,所有算术都是xs:double算术,但是数字到字符串转换规则通过要求输出“整数”来隐藏这一事实,就好像它们是整数一样。

答案 1 :(得分:0)

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

使用XSLT 2.0处理器,只需将@ProductID转换为xs: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:decimalxs:integer的基本类型,即任何xs:integer也是xs:decimal,因此此解决方案也适用于任何整数值。