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>
    <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ラップされます。variablerecursive_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 の助けを借りて、変数番号の入力として call-template に移動されます
  4. ここでは、同じテンプレートを再度呼び出して、次の名前の同じ変数に値を渡します。number
  5. 次に、結果の値が変数に割り当てられますrecursive_result

ご理解いただければ幸いです。

于 2013-07-17T09:26:50.097 に答える