XSLT 1.0 では、そのような変数宣言は結果ツリー フラグメントであり、ノード セットではありません。これで実行できるのは or のみですcopy-of
。XPathvalue-of
式を使用してその中に移動することはできません。どちらかにする必要があります
- exslt:node-setなどの拡張関数を使用して、RTF を実際のノード セットに変換するか、
- とのトリックを使用して
document('')
、スタイル シート自体に XML ドキュメントとしてアクセスします。
オプション 2 は、変数値が静的 XML である例のような場合にのみ機能します。xsl:
コマンドまたは属性値テンプレートを使用して値が構築された変数がある場合、たとえば
<xsl:variable name="allNames">
<xsl:for-each select="name">
<person name="{.}" />
</xsl:for-each>
</xsl:variable>
次に、node-set
関数を使用する必要があります。このdocument('')
アプローチでは、評価の結果ではなく、name 属性の実際のxsl:for-each
要素とリテラル値が得られます。{.}
オプション1
タグに追加xmlns:exslt="http://exslt.org/common" exclude-result-prefixes="exslt"
してから使用します<xsl:stylesheet>
<xsl:variable name="addr" select="addresses/item[
not(id=exslt:node-set($list)/row/webid)]"/>
オプション 2
<xsl:variable name="addr" select="addresses/item[
not(id=document('')//xsl:variable[name='list']/row/webid)]"/>