<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 name="getcount">
<xsl:element name="strong">
<xsl:param name="counted">
<xsl:value-of select="count(//book)"/>
</xsl:param>
Total Book Count: <xsl:value-of select="$counted"/>
</xsl:element>
</xsl:template>
前の例では、<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)
<?xml version='1.0'?>
<?xml-stylesheet type="text/xsl" href="paramelem.xsl"?>
<lists>
<ol>
<li>the</li>
<li>cat</li>
<ol>
<li>sat</li>
<li>on</li>
<li>the</li>
</ol>
<li>mat</li>
</ol>
</lists>
XSLT ファイル (paramelem.xsl)
<?xml version='1.0'?>
<?xml-stylesheet type="text/xsl" href="paramelem.xsl"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:template match="ol/li">
<br/>
<xsl:call-template name="numbered-block"/>
</xsl:template>
<xsl:template match="ol//ol/li">
<br/>   
<xsl:call-template name="numbered-block">
<xsl:with-param name="format">a. </xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template name="numbered-block">
<xsl:param name="format">1. </xsl:param>
<fo:block>
<xsl:number format="{$format}"/>
<xsl:apply-templates/>
</fo:block>
</xsl:template>
</xsl:stylesheet>
出力
これは書式付き出力です。
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> 要素