我正在尝试在同一级别(其元素名称都不同)中获取大量xml节点,同时排除某个节点子集。例如:
<root>
<foo>...</>
<foo>...</>
<bar>...</>
<bar>...</>
<baz>...</>
<spam>...</>
<eggs>...</>
<toast>...</>
</root>
所以我想要一个XPath表达式给我垃圾邮件鸡蛋和吐司节点列表,同时排除foo
,bar
和baz
节点。我知道我想提前排除的节点,但不知道剩下哪些节点。
答案 0 :(得分:1)
合并三个Xpathes
/root/spam | /root/eggs | /root/toast
或以不同的方式写相同
/root/*[contains("spam|eggs|toast", name())]
<强>更新强>
排除一组节点spam
,eggs
和toast
/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)]
选择root
,foo
或bar
baz
的所有子元素
<spam/>
<eggs/>
<toast/>
按要求。