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">.

如果有更清晰的示例可用,请指导我。我缺乏递归知识。

4

3 回答 3

1

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

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

于 2013-02-12T07:57:17.683 回答
1

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

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

于 2013-02-12T08:42:52.067 回答
0

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

  1. 输入数字变量为'1'
  2. 给定值,如果它小于 1,那么它只是打印的值$number
  3. 否则,在 with-param 的帮助下,将调用模板作为变量号的输入
  4. 在这里,它再次调用相同的模板并将值传递给名为的相同变量number
  5. 然后将结果值赋给变量recursive_result

希望会被理解。

于 2013-07-17T09:26:50.097 回答