如何模拟xsl:for-each



如何模拟

<xsl:for-each select="1 to 3">
XSLT 1.0中的

?

谢谢

使用递归:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
    <xsl:template match="/">
        <xsl:call-template name="foreach">
            <xsl:with-param name="i" select="0"/>
            <xsl:with-param name="n" select="10"/>
        </xsl:call-template>
    </xsl:template>
    <xsl:template name="foreach">
        <xsl:param name="i"/>
        <xsl:param name="n"/>
        <xsl:if test="$i &lt; $n">
            <xsl:value-of select="$i"/>
            <xsl:call-template name="foreach">
                <xsl:with-param name="i" select="$i + 1"/>
                <xsl:with-param name="n" select="$n"/>
            </xsl:call-template>
        </xsl:if>
    </xsl:template>
</xsl:stylesheet>

@Kirill提供了"标准答案"。

虽然它是正确的,但它有一个实际问题——对于N的大值,至少在某些XSLT处理器上,由于堆栈溢出,这种转换会痛苦地崩溃。

通常有一种方法可以对非常大的N执行这种转换,而不会出现堆栈溢出——在所有XSLT处理器上

这个答案中阅读更多关于DVC(分治)递归的信息。

对于较小的数字,您的样式表或您的输入文档可能有足够的节点来简单地处理,例如三个节点

<xsl:for-each select="//node()[position() &lt; 4]">
  <!-- now output stuff here -->
</xsl:for-each>

相关内容

  • 没有找到相关文章

最新更新