Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

XSLT パラメーターの概要

パラメーターは、名前付きテンプレートまたは名前なしテンプレートに渡すことができます。テンプレート内では、パラメーターを宣言する必要があり、その名前の前にドル記号 ($) を付けることで参照できます。

パラメータの宣言

パラメーターのスコープは、グローバルまたはローカルです。スクリプトの初期化時にJunos OSで値が設定されるパラメータは、グローバルパラメータとして定義する必要があります。グローバルパラメータ宣言は、スタイルシート宣言の直後に配置されます。スクリプトは、グローバル パラメータにデフォルト値を割り当てることができます。これは、Junos OS がパラメータに値を与えない場合に使用されます。

ローカル パラメーターはブロックの先頭で宣言する必要があり、そのスコープは宣言されているブロックに限定されます。テンプレート内では、<xsl:param> タグと name 属性を使用してパラメーターを宣言します。必要に応じて、XPath 式を含むことができる select 属性を含めることで、各パラメーターの既定値を宣言します。パラメーターを指定せずにテンプレートを呼び出すと、既定の式が評価され、結果がパラメーターに割り当てられます。テンプレートでデフォルト値を定義しない場合、パラメータはデフォルトで空の文字列になります。

次の名前付きテンプレート print-host-name は、パラメーター message を宣言し、既定値を定義します。

テンプレートは、パラメーター名の前にドル記号 ($) を付けることで、 message パラメーターの値にアクセスします。

パラメータの受け渡し

テンプレートを呼び出すときは、 <xsl:with-param> 要素と name 属性を使用して、引数をテンプレートに渡します。 <xsl:with-param> name 属性の値は、実際のテンプレートで定義されているパラメータの名前と一致する必要があります。一致しない場合、パラメータは無視されます。必要に応じて、テンプレートに渡すパラメーターごとに、 select 属性または <xsl:with-param> 要素の内容を使用して値を定義できます。

テンプレートで使用されるパラメーター値は、テンプレートの呼び出し方法によって異なります。 print-host-name テンプレートを呼び出す次の 3 つの例は、考えられる呼び出し環境を示しています。

テンプレートを呼び出し、特定のパラメーターの <xsl:with-param> 要素を含めない場合、テンプレートで定義されている既定の式が評価され、結果がパラメーターに割り当てられます。テンプレートにそのパラメーターの既定値がない場合、パラメーターの既定値は空の文字列になります。次の例では、名前付きテンプレート print-host-nameを呼び出しますが、呼び出しにはパラメーターを含めません。この場合、名前付きテンプレートは、print-host-name テンプレートで定義された message パラメーターの既定値を使用するか、既定値が存在しない場合は空の文字列を使用します。

テンプレートを呼び出してパラメーターを含め、呼び出し元の環境でパラメーターの値を定義しない場合、スクリプトはパラメーターの現在の値を渡します (以前に初期化されている場合) はパラメーターの現在の値を渡すか、パラメーターが宣言されていない場合はエラーを生成します。次の例では、名前付きテンプレート print-host-name を呼び出し、 message パラメーターを渡しますが、値は含まれていません。スクリプトで message が宣言および初期化され、スコープがブロックから見える場合、 message の現在の値が使用されます。 message がスクリプトで宣言されているが初期化されていない場合、 message の値は空の文字列になります。 message が宣言されていない場合、スクリプトはエラーを生成します。

テンプレートを呼び出し、パラメーターを含め、パラメーターの値を定義すると、テンプレートは指定された値を使用します。次の例では、message パラメーターと定義された値を使用して名前付きテンプレート print-host-nameを呼び出すため、テンプレートは新しい値を使用します。

例:パラメータと一致テンプレート

次のテンプレートは、XML ドキュメントのルートである / で一致します。次に、出力ドキュメントに追加される <outside> という名前の要素を生成し、Junos OS管理プロセス (mgd) にテンプレートをconfiguration/systemサブツリーに再帰的に適用するように指示します。パラメーター host は、一致するノードの処理に使用されます。hostパラメーターの値は、設定階層の [edit system] レベルにある host-name ステートメントの値です。

次のテンプレートは、前の例で選択したサブツリーの最上位である <system> 要素と一致します。host パラメーターは、既定値なしで宣言されています。前の例の <xsl:with-param> タグで定義された host パラメーターの値を含む <inside> 要素が生成されます。

例: パラメータと名前付きテンプレート

次の名前付きテンプレートreport-changedでは、現在のノードをデフォルトとする dot と、ノード dotchanged 属性をデフォルトとする changed の 2 つのパラメータを宣言しています。

次のスタンザは、report-changed テンプレートを呼び出し、report-changed テンプレートで定義されているデフォルト・ソースとは異なる changed 属性のソースを定義します。report-changedテンプレートが呼び出されると、デフォルトのソースの代わりに、changed属性に新しく定義されたソースが使用されます。

同様に、次に示すように、テンプレート呼び出しに dot パラメーターを含め、既定の現在のノード以外のソースを定義できます。