理解xslt中的递归



我正在努力理解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"
  2. 给定值如果小于1,则只打印$number的值
  3. 否则,在param的帮助下调用template作为变量号的输入
  4. 这里,它再次调用相同的模板,并将值传递给名为number的相同变量
  5. 然后将结果值分配给变量recursive_result

希望能被理解。

相关内容

  • 没有找到相关文章

最新更新