Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
理解xslt中的递归_Xslt_Recursion_Xslt 1.0 - Fatal编程技术网

理解xslt中的递归

理解xslt中的递归,xslt,recursion,xslt-1.0,Xslt,Recursion,Xslt 1.0,我试图理解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> <x

我试图理解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>

我不明白为什么我们用
包装阶乘模板


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

调用模板元素用
变量
元素包装,以便将调用结果分配给变量
递归结果


这样就可以将它乘以下一行的
number
,生成最终结果。

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


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

  • 将数字变量输入为“1”
  • 如果给定值小于1,则只需打印
    $number
  • 否则,可以在with param的帮助下调用模板作为变量号的输入
  • 在这里,它再次调用相同的模板,并将值传递给名为
    number
  • 然后将结果值分配给变量
    递归\u result

  • 希望你能理解。

    一个简单的问题,为什么我们要在代码的顶部使用
    ?这不是因为数字总是1吗?我不知道我是否正确。。。你的意思是为什么参数不在模板定义之外?如果这是你的问题。。。param是一个占位符,用于在模板内获取作为模板调用参数的值。参数也是不可变的。