1

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>

我想查询类似 //model[ @id = (//item/@refid) ] 的内容,以获取在“list”中具有引用 id 的所有“model”

4

2 回答 2

2

您的 xpath 表达式应该已经返回了您想要的内容。引自http://www.w3.org/TR/xpath/#booleans,第 5 段:

如果一个要比较的对象是一个节点集而另一个是一个字符串,那么当且仅当节点集中有一个节点使得对字符串值执行比较的结果时,比较才会为真节点和其他字符串为真

于 2010-06-20T13:46:21.797 回答
2

我想查询类似 //model[ @id = (//item/@refid) ] 的内容,以获取在“list”中具有引用 id 的所有“model”

这里的主要问题是您缺乏信心,并且没有实际运行 XPath 引擎来评估您提出的表达式。

如果您评估您建议的 XPath 表达式:

//model[ @id = (//item/@refid) ]

您会看到它准确地选择了(两个)model元素,它们的id属性refid由.itemlist

@Jörn-Horstmann 在他的回答中已经解释了为什么你会得到这些结果。

一个小的说明是通常避免使用//缩写。它会导致扫描整个文档并且效率非常低。在这种情况下,我将使用等效但可能更快的 XPath 表达式:

/*/catalogue/model[@id = /*/list/item/@refid]
于 2010-06-20T14:56:47.930 回答