撒克逊 8.7 和 9.1 之间 <xsl:数字级别= "any" >的不同行为



有人知道以下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
...

相关内容

最新更新