我正在努力理解xslt中的recrsion。有人能解释一下这个代码中发生了什么吗。
<xsl:template name="factorial">
<xsl:param name="number" select="1"/>
<xsl:choose>
<xsl:when test="$number <= 1">
<xsl:value-of select="1"/>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="recursive_result">
<xsl:call-template name="factorial">
<xsl:with-param name="number" select="$number - 1"/>
</xsl:call-template>
</xsl:variable>
<xsl:value-of select="$number * $recursive_result"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
我不明白为什么我们用<xsl:variable name="recursive_result">
包装阶乘模板。
如果有更明确的例子,请指导我。我缺乏递归方面的知识。
call-template
元素与variable
元素一起封装,以便将调用它的结果分配给变量recursive_result
。
这样做可以将其乘以下一行的number
,以产生最终结果。
您不能在XSLT中声明可从脚本其他部分更改的全局变量。如果需要模板调用的结果,递归是在变量中"打印"生成结果的唯一方法。
"打印输出"是使用<xsl:value-of ...
语句完成的。
在XSLT中,我们使用递归而不是循环。递归只不过是一种特殊类型的函数,当需要找到最终解决方案时,它会多次调用自己。所以,
- 将数字变量输入为"1"
- 给定值如果小于1,则只打印
$number
的值 - 否则,在param的帮助下调用template作为变量号的输入
- 这里,它再次调用相同的模板,并将值传递给名为
number
的相同变量 - 然后将结果值分配给变量
recursive_result
希望能被理解。