<xsl:param> 要素

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

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

属性

  • name
    必ず指定します。 パラメーターの 修飾名 (XSLT) を指定します。

  • select
    属性の値は 式 (XSLT) です。変数の値は、式の評価の結果として生成されるオブジェクトです。 この属性が指定されている場合、<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 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/>&#xA0;&#xA0;&#xA0;
   <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> 要素