XSLT 递归概述
XSLT 依赖于递归作为循环机制。当一段代码直接或间接调用自身时,就会发生递归。命名模板和未命名模板都可以使用递归,不同的模板可以使用相互递归,一个调用另一个模板又调用第一个模板。
为避免无限递归和过度消耗系统资源,Junos OS 管理进程 (mgd) 将最大递归限制为 5000 个级别。如果达到此限制,脚本将失败。
在下面的示例中,未命名的模板与元素匹配<count>
。然后,它调用<count-to-max>
模板,将元素的值count
作为 max
.模板首先<count-to-max>
声明max
和cur
参数,并将每个1
参数的默认值设置为 (one)。尽管 的max
可选默认值为 1,但模板将使用从count
模板传入的值。然后在元素中<out>
发出当前值cur
。最后,如果小于 ,则cur
模板递归调用自身,传递cur + 1
为 cur
。<count-to-max>
max
然后,此递归传递输出下一个数字并重复递归,直到cur
等于max
。
<xsl:template match="count"> <xsl:call-template name="count-to-max"> <xsl:with-param name="max" select="."/> </xsl:call-template> </xsl:template> <xsl:template name="count-to-max"> <xsl:param name="cur" select="'1'"/> <xsl:param name="max" select="'1'"/> <out><xsl:value-of select="$cur"/></out> <xsl:if test="$cur < $max"> <xsl:call-template name="count-to-max"> <xsl:with-param name="cur" select="$cur + 1"/> <xsl:with-param name="max" select="$max"/> </xsl:call-template> </xsl:if> </xsl:template>
给定一个max
值 ,标记中包含的<out>
值为 1
、 2
、 3
、 5
4
、 7
6
8
9
和 。10
10