XSLT 再帰の概要
XSLT はループ メカニズムとしての再帰に依存します。再帰は、コードのセクションが直接または間接的にそれ自体を呼び出すと発生します。名前付きテンプレートと名前なしテンプレートの両方で再帰を使用でき、異なるテンプレートは相互再帰を使用し、1 つは別のテンプレートを呼び出し、次に最初の呼び出しを呼び出すことができます。
無限の再帰とシステム リソースの過剰な消費を避けるために、Junos OS 管理プロセス(mgd)は最大再帰を 5000 レベルに制限します。この制限に達すると、スクリプトは失敗します。
次の例では、名前のないテンプレートが要素に<count>
一致します。次に、テンプレートを<count-to-max>
呼び出し、 要素の値を count
としてmax
渡します。テンプレートは<count-to-max>
、 と cur
の両方をmax
宣言し、それぞれのデフォルト値を(1)に設定することから1
始まります。オプションのデフォルト値max
は1ですが、テンプレートはテンプレートから渡された値をcount
使用します。その後、 の現在のcur
値が要素に<out>
放射されます。最後に、 が 以下の場合cur
、<count-to-max>
テンプレートは再帰的に自分自身を呼び出し、 を 渡cur
しますcur + 1
。max
この再帰的パスは次の数値を出力し、等しくなるまでcur
再帰的を繰り返しますmax
。
<xsl:template match="count"> <xsl:call-template name="count-to-max"> <xsl:with-param name="max" select="."/> </xsl:call-template> </xsl:template> <xsl:template name="count-to-max"> <xsl:param name="cur" select="'1'"/> <xsl:param name="max" select="'1'"/> <out><xsl:value-of select="$cur"/></out> <xsl:if test="$cur < $max"> <xsl:call-template name="count-to-max"> <xsl:with-param name="cur" select="$cur + 1"/> <xsl:with-param name="max" select="$max"/> </xsl:call-template> </xsl:if> </xsl:template>
指定されたmax
値が 10
、 タグに<out>
含まれる値は 1
、 2
、6
4
3
7
8
5
9
および 10
です。