В XSLT 1.0 объявление переменной, как это фрагмент результирующее дерево, а не набор узлов, и единственное, что вы можете сделать с ним copy-of
или value-of
- вы не можете перейти в него с XPath выражений. Вам нужно либо
- Используйте функцию расширения, такие как 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('')
дал бы вам фактический элемент xsl:for-each
и литеральное значение {.}
для атрибута name, а не результат его оценки.
Вариант 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)]"/>