Saxon 8.7和9.1之间<xsl:number level =“any”>的不同行为</xsl:number>

时间:2012-01-13 15:38:41

标签: xslt xslt-2.0 saxon

是否有人知道以下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"/>

哪个值是正确的?

提前感谢任何见解!

2 个答案:

答案 0 :(得分:1)

我通过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>

他们都打印了&#39; 2&#39;:

~ 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对此答案的评论中提供的版本确实打印了&#39; 1&#39;:

~ 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
...

答案 1 :(得分:1)

在我看来,好像这个错误修复引入了更改:

http://sourceforge.net/tracker/?func=detail&aid=1460712&group_id=29872&atid=397617

但是,多年来xsl:number中还有许多其他错误修复,可能值得检查其他错误。有些人正在修复撒克逊人实施中的漏洞,有些人正在对规范中的勘误作出回应:多年来对角落案件进行了大量澄清。请记住,在XSLT 2.0规范最终确定之前,2006年出现了8.7。 (并且xsl:number的XSLT 1.0规范极端模糊。)

Michael Kay