理解xslt中的递归

时间:2013-02-11 11:57:00

标签: xslt recursion xslt-1.0

我试图理解xslt中的recorsion。任何人都可以解释这段代码中发生的事情。

<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">包装因子模板。

如果有更明确的例子,请指导我。我在递归方面缺乏知识。

3 个答案:

答案 0 :(得分:1)

call-template元素包含variable元素,以便将调用它的结果分配给变量recursive_result

这样做是为了使它可以在下一行乘以number,以产生最终结果。

答案 1 :(得分:1)

您无法在XSLT中声明可从脚本的其他部分更改的全局变量。如果您需要模板调用的结果或递归是将生成的结果“打印”出变量的唯一方法。

“打印输出”是使用<xsl:value-of ...语句完成的。

答案 2 :(得分:0)

在XSLT中,我们使用递归而不是循环。递归只不过是一种特殊类型的函数,当需要找到最终解决方案时,它会多次调用自身。所以,

  1. 将数字变量输入为“1”
  2. 如果给定值小于1,则只打印$number
  3. 的值
  4. 否则,在with-param
  5. 的帮助下,它将作为变量号的输入移动到call-template
  6. 此处,它再次调用相同的模板并将值传递给名为number
  7. 的同一变量
  8. 然后,结果值将分配给变量recursive_result
  9. 希望能理解。