<xsl:variable> 要素

式の中で連結される値を指定します。

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

属性

  • name
    必ず指定します。変数の 修飾名
  • select
    属性の値は です。変数の値は、式の評価の結果として生成されるオブジェクトです。この属性が指定されている場合、<xsl:variable> 要素のコンテンツは空である必要があります。

要素情報

出現回数

無制限

親要素

xsl:attributexsl:commentxsl:copyxsl:elementxsl:for-eachxsl:ifxsl:otherwisexsl:paramxsl:processing-instructionxsl:stylesheetxsl:template、xsl:variable、xsl:whenxsl:with-param、出力要素

子要素

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

解説

式から返せる型のオブジェクトであれば、変数の値は何でもかまいません。<xsl:variable> 要素は、次の 3 とおりの方法で変数の値を指定できます。

  • 要素が select 属性を持っている場合は、属性の値を式にする必要があり、変数の値は式を評価した結果生成されるオブジェクトになります。この場合、要素のコンテンツは空である必要があります。

  • 要素が select 属性を持っておらず、1 つ以上の子ノードなど、空でないコンテンツを持っている場合は、そのコンテンツが値を指定します。コンテンツは、変数の値を指定するためにインスタンス化されるテンプレートです。この値は、テンプレートのインスタンス化で生成されたノードのシーケンスを子として持つ、単一のルート ノードだけを含むノード セットに対して等しい、結果ツリー フラグメントになります。結果ツリー フラグメント内のノードのベース URI は、変数バインディング要素のベース URI (Uniform Resource Identifier) です。

    テンプレートのインスタンス化によって生成されたノードのシーケンスのメンバが、属性ノードまたは名前空間ノードであった場合、エラーが発生します。これは、ルート ノードが属性ノードまたは名前空間ノードを子として持つことができないためです。

  • コンテンツが空であり、select 属性を持っていない場合、変数の値は空の文字列になります。したがって、以下は

    <xsl:variable name="x"/>
    

    以下と同等です。

    <xsl:variable name="x" select="''"/>
    

    位置を指定してノードを選択するために変数を使用する場合は、次のように指定しないように注意してください。

    <xsl:variable name="n">2</xsl:variable>
    ...
    <xsl:value-of select="item[$n]"/>
    

    このように指定すると、変数 "n" が番号ではなく、結果ツリー フラグメントにバインドされるため、最初の項目要素の値が出力されます。ここでは、次のように指定してください。

    <xsl:variable name="n" select="2"/>
    ...
    <xsl:value-of select="item[$n]"/>
    

    ... または、次のように指定してください。

    <xsl:variable name="n">2</xsl:variable>
    ...
    <xsl:value-of select="item[number($n)]"/>
    

参照

リファレンス

<xsl:param> 要素