1

如何获得适合特定条件的元素列表,但也没有适合相同条件的死者(即其层次结构中适合该条件的最低元素)?

例如,考虑以下 XML:

<root>
  <parent1 MyCond='true'>
    <child1 MyCond='false'>
      ...
    </child1>
    <child2 MyCond='true'>
      ...
    </child2>
    <child3 MyCond='false'>
      ...
    </child3>
  </parent1>
  <parent2 MyCond='false'>
    <child1 MyCond='false'>
      ...
    </child1>
    <child2 MyCond='true'>
      ...
    </child2>
  </parent2>
  <parent3 MyCond='true'>
    <child1 MyCond='false'>
      ...
    </child1>
  </parent3>
</root>

使用以下 XPath 表达式://*[@MyCond='true']给出[parent1, parent1/child2, parent2/child2, parent3].

我正在寻找一种方法来过滤掉列表parent1中已经有死者parent1/child2的人。

4

1 回答 1

2

只需添加谓词:没有符合真实条件的后代。

//*[@MyCond='true'][not(descendant::*[@MyCond='true'])] 

或者,等效地,

//*[@MyCond='true' and not(descendant::*[@MyCond='true'])] 
于 2013-08-18T14:21:45.637 回答