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, ,第五段:

如果要比较一个对象是节点集,而另一个是字符串,那么当且仅当节点集中有一个节点时,比较才是正确的,以便在字符串值上进行比较的结果节点和另一个字符串是正确的

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top