xpath在节点集中的查询像sql一样工作
题
XML文档的样本:
<xml>
<list>
<item refid="1" />
<item refid="3" />
</list>
<catalogue>
<model id="1"><details /></model>
<model id="2"><details /></model>
<model id="3"><details /></model>
</catalogue>
</xml>
我想查询诸如//型号[@id =(// item/ @refid)之类的东西,以获取所有“模型”,其中“ list”中的引用ID
解决方案
我想查询诸如//型号[@id =(// item/ @refid)之类的东西,以获取所有“模型”,其中“ list”中的引用ID
这里的主要问题是您缺乏信心 并且实际上并没有运行XPATH引擎来评估您提出的表达式。
如果您评估您提出的XPath表达式:
//model[ @id = (//item/@refid) ]
您会看到它精确地选择了(两个) model
元素,谁 id
属性由 refid
的属性 item
是子女的元素 list
.
@Jörn-Horstmann在他的回答中已经解释了为什么您会得到这些结果。
一个小评论通常是要避免使用 //
缩写. 。它导致整个文档进行扫描,并且效率非常低。在这种情况下,我将使用等效但可能更快地评估XPath表达:
/*/catalogue/model[@id = /*/list/item/@refid]
其他提示
您的XPATH表达式应该已经完全返回您想要的内容。引用 http://www.w3.org/tr/xpath/#booleans, ,第五段:
如果要比较一个对象是节点集,而另一个是字符串,那么当且仅当节点集中有一个节点时,比较才是正确的,以便在字符串值上进行比较的结果节点和另一个字符串是正确的
不隶属于 StackOverflow