在 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('')
方法将为您提供 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)]"/>