使用XSL
添加号码时,会显示exponent
的结果。例如,如果ProductID
为1111
<xsl:value-of select="@ProductID + 1000000"/>
它显示1.1111E6
之类的内容,但我希望结果为1001111
。
感谢。
答案 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:decimal
是xs:integer
的基本类型,即任何xs:integer
也是xs:decimal
,因此此解决方案也适用于任何整数值。