给定以下XML文档…
<r>
<e id="a" />
<e id="b" />
<e id="c" />
<x ref="#b" />
</r>
…我怎么能写一个XPath 1.0表达式,找到所有没有<x>
元素引用它们的<e>
元素?在本例中,结果应为#a
和#c
。
基于这个问题,我尝试了//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"/>
是否有办法使用发现集中的属性来进一步查询其他元素中其他属性的值?
从这个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"/>
要求。