Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

XSLT テンプレートの概要

XSLT スクリプトは、テンプレートと呼ばれるルールの 1 つ以上のセットで構成されています。各テンプレートは、指定されたノードが一致したときに適用するルールを含むコードのセグメントです。要素を<xsl:template>使用してテンプレートを構築します。

名前付きテンプレートと名前なし(または一致)の2種類のテンプレートがあり、以下のセクションで説明されています。

名前なし(一致)テンプレート

一致テンプレートとも呼ばれる名前のないテンプレートには、テンプレートを呼び出すノードの基準を指定する XPath 式を含む属性が含matchまれます。次の例では、現在のコンテキストの子であり、値が文字列10.10.で始まる という名前の子要素を持つ という名前routenext-hopの要素にテンプレートが適用されます。

XSLT は、既定では、ドキュメントを処理すると、ドキュメント階層全体を再帰的にトラバースし、各ノードを検査して、現在のノードに一致するテンプレートを探します。一致するテンプレートが見つかった場合、そのテンプレートの内容が評価されます。

<xsl:apply-templates> XSLT のデフォルトのノード階層トラバーサルを制限および制御するために、名前のないテンプレート内で要素を使用できます。エレメントに<xsl:apply-templates>属性があるselect場合は、その属性で定義された XPath 式に一致するノードのみがトラバースされます。それ以外の場合、コンテキスト ノードのすべての子がトラバースされます。属性がselect含まれているがノードに一致しない場合、何も通過せず、何も起こりません。

次の例では、テンプレート ルールは XML 階層の要素に一致 <route> します。属性を changed 含むすべてのノードが処理されます。 <route> 属性を changed 含むすべての要素は、要素に <new> 置き換えられます。

名前のないテンプレートを使用すると、スクリプトは 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: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が呼び出されます。

コミット スクリプトで名前付きテンプレートを使用する方法の例については、 例: 設定ステートメントの要求と制限を参照してください。