3

我有一点 XSLT,它在整数数据库标识符上执行一些魔术。相关的代码片段是

      <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)但似乎没有达到预期的结果。

XSL 正在使用 Saxon 8.7 执行。

4

2 回答 2

9

使用格式编号(详细参考:这里

于 2010-01-07T00:54:31.810 回答
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"/>
于 2018-07-26T17:52:41.633 回答