在xslt中下降递归
问题描述:
我想了解xslt中的背景。任何人都可以解释这段代码中发生了什么。在xslt中下降递归
<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
- 这里,再次调用相同的模板,并传递价值,命名为
number
- 那么结果值将被赋给变量
recursive_result
同一个变量的帮助下,可变数目
希望会明白。
一个简单的问题为什么我们要在代码顶部使用' '?它不会导致数字总是1? –
newday
2013-02-13 06:29:15
我不知道我是否正确答案......你的意思是为什么param不在模板定义之外?如果这是你的问题...... param是一个占位符,可以将值作为模板调用参数。参数也是不变的。 – OkieOth 2013-02-13 15:08:19