考虑在递归调用的模板中存在的这种情况:
<xsl:if test="$i <= $count">
我使用的是XSLT 2.0处理器(Saxon-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 <= $count">
...
</xsl:if>
<!-- Repeat the loop by recursion -->
<xsl:if test="$i <= $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>
感谢。
答案 0 :(得分:1)
我怀疑:根据$i
和$coun
的数据类型,“小于”测试可能在2.0中失败(支持的数据类型多于1.0),其中1.0存在正确的隐式转换。
在比较之前尝试将数据转换为正确的类型,例如使用number()
。