<xsl:variable> 要素
式の中で連結される値を指定します。
<xsl:variable
name = QName
select = Expression
</xsl:variable>
属性
- name
必ず指定します。変数の 修飾名。
- select
属性の値は 式 です。変数の値は、式の評価の結果として生成されるオブジェクトです。この属性が指定されている場合、<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)]"/>