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、6437859および 10です。