2009-05-05 90 views
0

考虑这个条件,即存在于模板被递归调用:条件适用于XSLT 1.0样式,但不能用于XSLT 2.0样式表

<xsl:if test="$i &lt;= $count"> 

我使用XSLT 2.0处理器(撒克逊-B 9.1。 0.6)。该条件似乎只在运行XSLT 1.0样式表时才起作用。当样式表版本设置为2.0(它应该是)时,它停止工作。

任何想法为什么?

这里的整个事情:

<xsl:template name="for.loop"> 
    <xsl:param name="i" /> 
    <xsl:param name="count" /> 

    <xsl:if test="$i &lt;= $count"> 
    ... 
    </xsl:if> 

    <!-- Repeat the loop by recursion --> 
    <xsl:if test="$i &lt;= $count"> 
     <xsl:call-template name="for.loop"> 
      <xsl:with-param name="i"> 
       <xsl:value-of select="$i + 1" /> 
      </xsl:with-param> 
      <xsl:with-param name="count"> 
       <xsl:value-of select="$count" /> 
      </xsl:with-param> 
     </xsl:call-template> 
    </xsl:if> 
</xsl:template> 

感谢。

回答

1

这是我的怀疑:根据是什么数据类型$i$coun吨中,“小于”测试可以以2.0失败(支持超过1.0的数据类型),其中在1.0的隐式转换存在确实的正确的事。

尝试在比较之前将数据转换为正确类型,例如使用number()

+0

修复它。我在第二次测试中使用了数字($ count)。奇怪为什么只有一个测试需要改变。 – Jonathan 2009-05-05 16:27:12