给出以下XML文档......
<r>
<e id="a" />
<e id="b" />
<e id="c" />
<x ref="#b" />
</r>
...我怎样才能编写一个XPath 1.0表达式,找出没有引用它们的<e>
元素的所有<x>
个元素?在此示例中,结果应为#a
和#c
。
基于this question,我尝试了//e[ not(//x[@ref=concat("#",@id)]) ]
,但这并未省略引用的元素:
# Ruby code using Nokogiri
puts doc.xpath( '//e[ not(//x[@ref=concat("#",@id)]) ]' )
#=> <e id="a"/>
#=> <e id="b"/>
#=> <e id="c"/>
有没有办法在找到的集合中使用属性来进一步查询其他元素中其他属性的值?
答案 0 :(得分:3)
来自此XML
<r>
<e id="a" />
<e id="b" />
<e id="c" />
<x ref="#b" />
</r>
此XPath
//e[ not(//x/@ref=concat("#",@id)) ]
将选择
<e id="a"/>
<e id="c"/>
根据要求。