我们必须转换一些包含指数(又称科学)表示法的数字的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); };
答案 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>