使用XSLT(FO)将科学记数法转换为double

时间:2010-02-26 14:26:30

标签: xslt xsl-fo

我想要转换的XML包含类似7.3248378E7的内容,XSL-FO处理器本身不支持这种内容(最终在PDF文件中以NaN结尾)。是否有一种很好的方式(与脏黑客相反)转换这种数字格式?

非常感谢。

3 个答案:

答案 0 :(得分:1)

我发现这篇文章:XSL Transform for converting from scientific notation to decimal number提供了一个XSLT 1.0样式表。

包含/导入样式表后,调用 convertSciToNumString 模板进行转换:

<xsl:call-template name="convertSciToNumString">
    <xsl:with-param name="myval" select="'7.3248378E7'"/>
</xsl:call-template>

制作:73248378

这可以作为数字进行评估,并且应该解决您的NaN问题:

<xsl:variable name="num">
    <xsl:call-template name="convertSciToNumString">
      <xsl:with-param name="myval" select="'7.3248378E7'"/>
    </xsl:call-template>
</xsl:variable>

<xsl:value-of select="$num"/> + 1 = <xsl:value-of select="$num + 1" />

制作:73248378 + 1 = 73248379

答案 1 :(得分:0)

项目是否指定为xs:float或xs:double,而不是xs:decimal?如果这不起作用,那么我认为你将不得不采用“肮脏的黑客”方法。请参阅XSLT page中的“要求29”。

答案 2 :(得分:0)

今天我必须通过科学转换来解决类似的问题。最后我不得不编写自己的XSLT转换模板,因为这里提到的Michael Case的原始“convertSciToNumString”在其他答案中有一些错误。

这是一篇关于此实现和转换测试的文章。 http://www.orm-designer.com/article/xslt-convert-scientific-notation-to-decimal-number