有人知道以下XSLT在saxon 8.7下打印"1"和在9.1.0.8下打印"2"的原因吗?
<xsl:variable name="count1">
<xsl:variable name="tmp1"><x y="z"><x/></x></xsl:variable>
<xsl:for-each select="$tmp1/x/x">
<xsl:number level="any" from="x[@y='z']" />
</xsl:for-each>
</xsl:variable>
<xsl:message select="$count1"/>
哪个值是正确的?
提前感谢您的任何见解!
在我看来,更改似乎是由这个错误修复引入的:
http://sourceforge.net/tracker/?func=detail&aid=1460712&group_id=29872&atid=397617
然而,多年来,xsl:number还修复了许多其他错误,值得检查一下其他错误。有些是在修复Saxon实现中的错误,有些是为了响应规范中的错误:多年来,已经对角落案例进行了大量澄清。请记住,8.7是在XSLT2.0规范最终确定之前的2006年发布的。(xsl:number的XSLT1.0规范非常模糊。)
Michael Kay
我通过Saxon 8.7.3J和Saxon HE 9.3.0.8J运行了以下内容:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:output method="xml" encoding="utf-8" indent="yes"/>
<xsl:variable name="count1">
<xsl:variable name="tmp1"><x y="z"><x/></x></xsl:variable>
<xsl:for-each select="$tmp1/x/x">
<xsl:number level="any" from="x[@y='z']" />
</xsl:for-each>
</xsl:variable>
<xsl:template match="/">
<xsl:message select="$count1"/>
</xsl:template>
</xsl:stylesheet>
他们都打印了'2':
~ zacharyyoung$ java -jar ~/Downloads/saxonb8-7-3j/saxon8.jar ~/so.xsl ~/so.xsl
2
--和--
~ zacharyyoung$ java -jar /usr/local/saxon9he.jar -s:so.xsl -xsl:so.xsl
2
<?xml version="1.0" encoding="utf-8"?>
编辑1
OP对此答案的评论中提供的版本确实打印了"1":
~ zacharyyoung$ java -jar ~/Downloads/saxon-8.7.jar ~/so.xsl ~/so.xsl
1
~ zacharyyoung$ java -jar ~/Downloads/saxon-8.7.jar
No source file name
Saxon 8.7J from Saxonica
...