<xsl:param> 要素

<xsl:stylesheet> 要素または <xsl:template> 要素の内部で使用する名前付きパラメーターを宣言します。 この要素を利用して既定値を指定できます。

<xsl:param
  name = QName
  select = Expression
</xsl:param>

属性

  • name
    必須。 パラメーターの 修飾名 を指定します。
  • select
    属性の値は であり、変数の値は式を評価した結果生成されるオブジェクトです。 この属性が指定されている場合、<xsl:param> 要素は空である必要があります。

要素情報

出現回数

無制限

親要素

xsl:stylesheetxsl:templatexsl:transform

子要素

xsl:apply-templatesxsl:attributexsl:call-templatexsl:choosexsl:commentxsl:copyxsl:copy-ofxsl:elementxsl:for-eachxsl:ifxsl:processing-instructionxsl:textxsl:value-ofxsl:variable、出力要素

解説

<xsl:param> 要素で指定される値は、バインディングの既定値です。 <xsl:param> が含まれたテンプレートまたはスタイル シートを呼び出すと、既定値の代わりに使用されるパラメーターが渡されます。

<xsl:param> 要素は、<xsl:template> 要素の直接の子要素として宣言する必要があります。 そうしないと <xsl:param> 要素の値がアクセス不能になり、エラーが発生します。 次に例を示します。

前の例では、<xsl:template> 要素の直接の子要素は <strong> 要素だけです。 そのため、パーサーが <xsl:param> 要素の値を正しく評価できず、次のエラーが発生します。

ms256096.note(ja-jp,VS.100).gif注 :
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> 要素