XSLT:处理使用指数表示法的数值

时间:2010-02-23 16:01:06

标签: xslt parsing numbers

我们必须转换一些包含指数(又称科学)表示法的数字的XML 例如

    <Value>12.34e12</Value>
    <Value>-12.34e-12</Value>

相当恼人,我们不能使用sum()函数等,因为XSLT解析器期望数字是十进制格式。

[我们使用.Net XslCompiledTransform类进行转换,但我认为这个问题对所有XSLT实现都很常见]

我们到目前为止解决这个问题的唯一方法是使用javascript函数将字符串值转换为数字(见下文),然后编写我们自己的调用此函数的sum模板。

在我看来,必须有更好的方法 - 是吗?

/*
 This function attempts to coerce the input into a number. 
*/
function toNumber( x ) {
 if(!x) {
  return Number.NaN;
 }
 if(typeof x === 'number') {
  return x;
 }
 return parseFloat(x);
};

1 个答案:

答案 0 :(得分:-1)

Saxon-B 9.0.0.6在这里运作正常。输出0。

编辑:现在我看到Saxon 6(仅适用于xslt 1.0的处理器)返回NaN。但是如果你尝试xslt 2.0,你将不会想要任何其他东西。 : - )

XML:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <Value>12.34e12</Value>
    <Value>-12.34e12</Value>
</root>

XSLT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="root">
    <xsl:value-of select="sum(Value)"/>
</xsl:template>
</xsl:stylesheet>