条件适用于XSLT 1.0样式表,但不适用于XSLT 2.0样式表

时间:2009-05-05 15:43:50

标签: xslt

考虑在递归调用的模板中存在的这种情况:

<xsl:if test="$i &lt;= $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 &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 个答案:

答案 0 :(得分:1)

我怀疑:根据$i$coun的数据类型,“小于”测试可能在2.0中失败(支持的数据类型多于1.0),其中1.0存在正确的隐式转换。

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