XPath选择后代元素,但排除嵌套的元素。

3

我想选择所有包含“condition”元素的“target”元素。到目前为止,很容易实现: "//target[descendant::condition]"

但问题是:我的“target”元素是嵌套的,我不希望选择那些包含一个或多个“condition”元素的“target”元素,这些元素仅位于另一个“target”元素内部。

可以看到,我的XML文件如下:

<ROOT>

<target id="1">
 <condition/>
</target>

<target id="2">
 <any_tag/>
</target>

<target id="3">
 <condition/>
 <target id="4">
   <condition>
 </target>
</target>

<target id="5">
 <target id="6">
  <condition/>
 </target>
</target>

</ROOT>

我想选择id为1、3、4和6的“目标”元素,但不包括5,因为在这个<target>标签和“条件”标签之间还有另一个“目标”标签。

(在我的真实代码中,“条件”元素不是“目标”元素的直接子元素。出于简化的原因,我改变了这一点。)

1个回答

2
您可以在这种情况下使用ancestor
//condition/ancestor::target[1]

您应该使用[1]来仅选择每个条件的第一个祖先。


我曾经考虑过这个问题,但是我认为这可能会选择某些“目标”元素超过一次,因为在某些情况下,那里有多个“条件”元素。但不知何故它起作用了!谢谢! - cis
我认为不可能选择一个元素超过一次。这就是为什么它能够工作的原因。不用谢。 - ievche

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接