<xsl:param> 要素
<xsl:stylesheet>
要素または <xsl:template>
要素の内部で使用する名前付きパラメーターを宣言します。 この要素を利用して既定値を指定できます。
<xsl:param
name = QName
select = Expression
</xsl:param>
属性
- name
必須。 パラメーターの 修飾名 を指定します。
- select
属性の値は 式 であり、変数の値は式を評価した結果生成されるオブジェクトです。 この属性が指定されている場合、<xsl:param>
要素は空である必要があります。
要素情報
解説
<xsl:param>
要素で指定される値は、バインディングの既定値です。 <xsl:param>
が含まれたテンプレートまたはスタイル シートを呼び出すと、既定値の代わりに使用されるパラメーターが渡されます。
<xsl:param>
要素は、<xsl:template>
要素の直接の子要素として宣言する必要があります。 そうしないと <xsl:param>
要素の値がアクセス不能になり、エラーが発生します。 次に例を示します。
前の例では、<xsl:template>
要素の直接の子要素は <strong>
要素だけです。 そのため、パーサーが <xsl:param>
要素の値を正しく評価できず、次のエラーが発生します。
注 : |
---|
Keyword xsl:param may not be used here. |
<xsl:template>
要素のコンテキスト内でこの要素が評価されるようにするには、次の方法で要素を配置します。
<xsl:template name="getcount">
<xsl:param name="counted">
<xsl:value-of select="count(//book)"/>
</xsl:param>
<xsl:element name="strong">
Total Book Count: <xsl:value-of select="$counted"/>
</xsl:element>
式から返せる型のオブジェクトであれば、パラメーターの値は何でもかまいません。 <xsl:param>
要素は、次の 3 とおりの方法で変数の値を指定できます。
要素が
select
属性を持っている場合は、属性の値を式にする必要があり、パラメーターの値は式を評価した結果生成されるオブジェクトになります。 この場合、要素のコンテンツは空である必要があります。要素が
select
属性を持っておらず、1 つ以上の子ノードなど、空でないコンテンツを持っている場合は、そのコンテンツが値を指定します。 コンテンツは、パラメーターの値を指定するためにインスタンス化されるテンプレートです。 この値は、テンプレートのインスタンス化で生成されたノードのシーケンスを子として持つ、単一のルート ノードだけを含むノード セットに対して等しい、結果ツリー フラグメントになります。 結果ツリー フラグメント内のノードのベース URI は、要素のベース URI です。テンプレートのインスタンス化によって生成されたノードのシーケンスのメンバーが、属性ノードまたは名前空間ノードであった場合、エラーが発生します。これは、ルート ノードが属性ノードまたは名前空間ノードを子として持つことができないためです。
コンテンツが空であり、
select
属性がない場合、パラメーターの値は空の文字列になります。 したがって、以下は<xsl:param name="x"/>
以下と同等です。
<xsl:param name="x" select="''"/>
位置を指定してノードを選択するためにパラメーターを使用する場合は、次のように指定しないように注意してください。
<xsl:param name="n">2</xsl:param> ... <xsl:value-of select="item[$n]"/>
このように指定すると、変数 "n" が番号ではなく、結果ツリー フラグメントにバインドされるため、最初の項目要素の値が出力されます。 代わりに、次のいずれかを指定してください。
<xsl:param name="n" select="2"/> ... <xsl:value-of select="item[$n]"/>
または
<xsl:param name="n">2</xsl:param> ... <xsl:value-of select="item[number($n)]"/>
空のノード セットをパラメーターの既定値として指定する便利な方法を次に示します。
<xsl:param name="x" select="/.."/>
例
この例では、番号の形式を制御する引数を使用して "番号付きブロック" 用の名前付きテンプレートを定義します。
XML ファイル (catmat.xml)
XSLT ファイル (paramelem.xsl)
出力
これは書式付き出力です。
1. the 2. cat a. sat b. on c. the 3. mat
以下は、プロセッサ出力です (わかりやすくするために空白を追加してあります)。
<?xml version="1.0" encoding="UTF-16"?>
<br xmlns:fo="http://www.w3.org/1999/XSL/Format" />
<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format">1. the</fo:block>
<br xmlns:fo="http://www.w3.org/1999/XSL/Format" />
<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format">2. cat</fo:block>
<br xmlns:fo="http://www.w3.org/1999/XSL/Format" />
<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format">a. sat</fo:block>
<br xmlns:fo="http://www.w3.org/1999/XSL/Format" />
<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format">b. on</fo:block>
<br xmlns:fo="http://www.w3.org/1999/XSL/Format" />
<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format">c. the</fo:block>
<br xmlns:fo="http://www.w3.org/1999/XSL/Format" />
<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format">3. mat</fo:block>
参照
リファレンス
<xsl:with-param> 要素
<xsl:variable> 要素
<xsl:call-template> 要素