考虑以下情况:
<xsl:variable name="list">
<row>
<webid>2</webid>
</row>
<row>
<webid>3</webid>
</row>
<row>
<webid>4</webid>
</row>
</xsl:variable>
<!--pseudo code, not sure if it will work in real time-->
<xsl:variable name="addr" select="addresses/item[not(id=$list/webid)]"/>
我想过滤那些ID不在$list webid collection
的地址项。我发布的表达式会吗?请指教。
答案 0 :(得分:2)
在XSLT 1.0中,像这样的变量声明是一个结果树片段,而不是一个节点集,你可以用copy-of
或value-of
做唯一的事情。 - 您无法使用XPath表达式导航到它。你需要
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)]"/>
答案 1 :(得分:0)
我没有(地址/项目[id = $ list / webid])