我有一些XSLT,它对整数数据库标识符执行一些魔术。相关代码snippit是
<xsl:variable name="releaseId" select="@ID + $contentOffsetId"/>
<xsl:attribute name="OLD_ID"> <xsl:value-of select="@ID" /> </xsl:attribute>
<xsl:attribute name="RELEASE_ID"> <xsl:value-of select="$releaseId" />
不幸的是,这个输出看起来像这样:
<ALBUM.RELEASE_LOCALE LOCALE_CODE="en_US" OLD_ID="6597512" RELEASE_ID="6.597513E6">
这个结果对我来说没用,因为我无法使用科学记数法作为我的数据库导入实用程序的输入。我已经在变量声明上尝试了许多函数,例如string(@ID + $contentOffsetId)
,但似乎没有任何效果达到预期效果。
正在使用Saxon 8.7执行XSL。
答案 0 :(得分:7)
使用format-number(详细参考:here)
答案 1 :(得分:0)
我怀疑@ID
和$contentOffsetId
都是伪装成双精度的整数,最好的策略是使用整数算术而不是浮点算术。然后,转换为字符串将使用整数规则而不是双精度规则,这将避免使用科学计数法。
您尚未向我们展示$contentOffsetId
的来源,但是如果我的猜测正确,请在变量声明中使用as="xs:integer"
将其声明为整数。
对于@ID
,我的猜测是您的样式表不了解架构,因此@ID
是无类型的;您可以使用xs:integer(@ID)
将其转换为整数。在算术表达式中使用无类型原子值时,默认值是转换为xs:double
,但这在很大程度上是XSLT 1.0的遗产,并且通常是不合适的。
在XSLT 2.0中您可以替换
<xsl:attribute name="x"><xsl:value-of select="Y"/></xsl:attribute>
作者
<xsl:attribute name="x" select="Y"/>