在XPath中,如何选择与子集不匹配的所有节点?

时间:2016-08-03 17:11:11

标签: java xml xpath

我正在尝试在同一级别(其元素名称都不同)中获取大量xml节点,同时排除某个节点子集。例如:

<root>
  <foo>...</>
  <foo>...</>
  <bar>...</>
  <bar>...</>
  <baz>...</>
  <spam>...</>
  <eggs>...</>
  <toast>...</>
</root>

所以我想要一个XPath表达式给我垃圾邮件鸡蛋和吐司节点列表,同时排除foobarbaz节点。我知道我想提前排除的节点,但不知道剩下哪些节点。

2 个答案:

答案 0 :(得分:1)

合并三个Xpathes

/root/spam | /root/eggs | /root/toast

或以不同的方式写相同

/root/*[contains("spam|eggs|toast", name())]

<强>更新

排除一组节点spameggstoast

/root/*[not(contains("spam|eggs|toast", name()))]

答案 1 :(得分:1)

对于格式良好的XML,

<root>
  <foo/>
  <foo/>
  <bar/>
  <bar/>
  <baz/>
  <spam/>
  <eggs/>
  <toast/>
</root>

使用此XPath,

/root/*[not(self::foo or self::bar or self::baz)]

选择rootfoobar

集合中baz的所有子元素
<spam/>
<eggs/>
<toast/>

按要求。

相关问题