算术XPath表达式的字符串值

时间:2016-03-27 19:06:03

标签: xml xslt xpath

我发现了跟随XSL转换的不同结果。

XSL:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="test">
        <xsl:variable name="p1" select="a/@p1"/>
        <xsl:variable name="p2" select="a/@p2"/>
        <xsl:variable name="p3" select="a/@p3"/>

        <xsl:value-of select="$p1+$p2*$p3"/><br />
        <xsl:value-of select="$p2*$p3+$p1"/>
    </xsl:template>
</xsl:stylesheet>

XML:

<test>
    <a p1="1458569700" p2="60" p3="60"/>
</test>

的libxslt:

<?xml version="1.0"?>
1458573300<br/>1458573300

某种Java库(http://xslttest.appspot.com):

<?xml version="1.0" encoding="UTF-8"?>1.4585733E9<br/>1.4585733E9

谁是正确的以及为什么(参考规范会很棒)?

1 个答案:

答案 0 :(得分:1)

这两个结果在数学上都是“正确的”。就标准而言,XSLT 1.0不允许使用科学记数法,但XSLT 2.0确实如此。

XPath 1.0:

https://www.w3.org/TR/xpath/#exprlex 生产[30]

XPath 2.0

  

将数字转换为字符串的规则已更改。这些可能   影响数字在样式表输出中的显示方式。   对于绝对值在1E-6到1E + 6范围内的数字,   结果应该是相同的,但超出此范围,科学格式   用于非整数xs:float和xs:double值。

https://www.w3.org/TR/xpath20/#id-incompat-in-true-mode