このページで
XSLT テンプレートの概要
XSLT スクリプトは、テンプレートと呼ばれるルールの 1 つ以上のセットで構成されています。各テンプレートは、指定されたノードが一致したときに適用するルールを含むコードのセグメントです。要素を<xsl:template>
使用してテンプレートを構築します。
名前付きテンプレートと名前なし(または一致)の2種類のテンプレートがあり、以下のセクションで説明されています。
名前なし(一致)テンプレート
一致テンプレートとも呼ばれる名前のないテンプレートには、テンプレートを呼び出すノードの基準を指定する XPath 式を含む属性が含match
まれます。次の例では、現在のコンテキストの子であり、値が文字列10.10.
で始まる という名前の子要素を持つ という名前route
next-hop
の要素にテンプレートが適用されます。
<xsl:template match="route[starts-with(next-hop, '10.10.')]"> <!-- ... body of the template ... --> </xsl:template>
XSLT は、既定では、ドキュメントを処理すると、ドキュメント階層全体を再帰的にトラバースし、各ノードを検査して、現在のノードに一致するテンプレートを探します。一致するテンプレートが見つかった場合、そのテンプレートの内容が評価されます。
<xsl:apply-templates>
XSLT のデフォルトのノード階層トラバーサルを制限および制御するために、名前のないテンプレート内で要素を使用できます。エレメントに<xsl:apply-templates>
属性があるselect
場合は、その属性で定義された XPath 式に一致するノードのみがトラバースされます。それ以外の場合、コンテキスト ノードのすべての子がトラバースされます。属性がselect
含まれているがノードに一致しない場合、何も通過せず、何も起こりません。
次の例では、テンプレート ルールは XML 階層の要素に一致 <route>
します。属性を changed
含むすべてのノードが処理されます。 <route>
属性を changed
含むすべての要素は、要素に <new>
置き換えられます。
<xsl:template match="route"> <new> <xsl:apply-templates select="*[@changed]"/> </new> </xsl:template>
名前のないテンプレートを使用すると、スクリプトは XML 階層のタグの場所を無視できます。たとえば、すべての <author>
タグをタグに変換する場合、テンプレートを使用すると、入力 XML ドキュメント内の場所に <div class="author">
関係なく、すべての <author>
タグを変換する単一のルールを作成できます。
スクリプトでの名前なしテンプレートの使用方法の詳細については、 xsl:template match="/" テンプレートを参照してください。
名前付きテンプレート
名前付きテンプレートは、従来のプログラミング言語の関数と同様に動作しますが、詳細な構文を使用します。スクリプトの複雑さが増したり、コード セグメントが複数の場所に表示された場合は、コードをモジュール化して名前付きテンプレートを作成できます。関数と同様に、名前付きテンプレートは引数を受け入れ、明示的に呼び出された場合にのみ実行されます。
エレメントを使用して名前付きテンプレートを<xsl:template>
作成し、従来のプログラミング言語の関数名と同様の属性を定義name
します。タグとそのname
属性を<xsl:param>
使用して、名前付きテンプレートのパラメーターを定義し、必要に応じて属性をselect
含めて各パラメーターのデフォルト値を宣言します。属性には select
XPath 式を含めることができます。属性がselect
定義されていない場合、パラメータのデフォルトは空の文字列になります。
次の例では、 という名前 my-template
のテンプレートを作成し、3 つのパラメーターを定義します。そのうちの 1 つは文字列 false
にデフォルトで、そのうちの 1 つは、現在のコンテキスト ノードの子という名前 name
の要素ノードのコンテンツにデフォルト設定されます。スクリプトがテンプレートを呼び出し、パラメーターを渡さない場合、デフォルト値が使用されます。
<xsl:template name="my-template"> <xsl:param name="a"/> <xsl:param name="b" select="'false'"/> <xsl:param name="c" select="name"/> <!-- ... body of the template ... --> </xsl:template>
スクリプトで名前付きテンプレートを呼び出すには、 要素を使用します <xsl:call-template>
。属性 name
は必須で、呼び出されるテンプレートの名前を定義します。処理されると、要素 <xsl:call-template>
は名前の要素の内容に <xsl:template>
置き換えられます。
名前付きテンプレートを呼び出す場合、子要素を含<xsl:with-param>
め、属性を指定することで、テンプレートに引数をname
渡すことができます。属性の値は、実際の<xsl:with-param>
name
テンプレートで定義されたパラメーターと一致する必要があります。そうでない場合、パラメーターは無視されます。必要に応じて、属性または要素の内容をselect
持つ各パラメーターの値を<xsl:with-param>
設定できます。呼び出し元環境でパラメーターの値を定義していない場合、スクリプトは以前に初期化されていた場合、パラメーターの現在の値を渡すか、パラメーターが宣言されていない場合にエラーが生成されます。パラメーターの受け渡しの詳細については、 XSLT パラメーターの概要を参照してください。
次の例では、現在のコンテキスト ノードの子という名前other-name
の要素ノードの内容を含むパラメーターc
でテンプレートmy-template
が呼び出されます。
<xsl:call-template name="my-template"> <xsl:with-param name="c" select="other-name"/> </xsl:call-template>
コミット スクリプトで名前付きテンプレートを使用する方法の例については、 例: 設定ステートメントの要求と制限を参照してください。