<xsl:param> 要素
<xsl:stylesheet> 要素または <xsl:template> 要素の内部で使用する名前付きパラメーターを宣言します。 この要素を利用して既定値を指定できます。
<xsl:param
name = QName
select = Expression
</xsl:param>
属性
name
必ず指定します。 パラメーターの 修飾名 (XSLT) を指定します。select
属性の値は 式 (XSLT) です。変数の値は、式の評価の結果として生成されるオブジェクトです。 この属性が指定されている場合、<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> 要素の値を正しく評価できず、次のエラーが発生します。
注意
キーワード xsl:param はここで使用することはできません。
<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>