如何从xpath结果中排除元素

时间:2016-01-25 08:36:11

标签: xpath

嗨,我知道这很基本,但我自己找不到答案。

在这个例子中:

<root>
   <a/>
   <b/>
   <c/>
   <d/>
</root>

我想选择rootb以外的所有d个孩子。

我写了类似的东西,但是没有用。

/root/*[not(b) and not(d)]

结果是所有的根孩子:a,b,c,d。 如何仅选择ac

3 个答案:

答案 0 :(得分:1)

正确的xpath是/root/*[name() != 'b' and name() != 'c'],我检查了节点的名称

答案 1 :(得分:1)

  

&#34;我想选择除props{...props}&#34;

以外的所有根儿童

您尝试的XPath错过b轴:

d

答案 2 :(得分:1)

如果您正在使用XPath 2.0,则可以使用以下内容,如果您必须更新排除列表,则可能会更短,更容易阅读:

/root/*[not(name() = ('b', 'c'))]

这利用了序列上的XPath 2.0 =运算符,如果比较序列中有一对相等的项,则返回true。因此,如果元素name()'b''c',则比较为true,然后您要排除该节点(因此{{1} }})。

另外,请检查What is the difference between name() and local-name()?,看看您是否应该使用not()name()。在大多数情况下,人们真正想要的是local-name()