我的文档格式如下:
<Root>
<A />
<C />
<B />
<A>
<B>
<A />
<C />
</B>
</A>
</Root>
我想“抓住”所有元素A
和B
,并将它们列在新文档中:
<A /> <B /> <A /> <B /> ...
使用XPath,查询是否(使用Root
作为上下文节点):
.//*[A | B]
答案 0 :(得分:3)
使用强>:
//*[self::A or self::B]
这将选择文档中A
或B
。
仅遍历文档:)
答案 1 :(得分:2)
根据 Welbog 的回答,我想出了这个:
.//*[name()="A" or name()="B"]
它做了所谓的。
答案 2 :(得分:2)
你可以简单地写//A|//B
(前一个似乎没有用,除了在一个在线xpath测试器中,它会教我信任它们)。虽然这会两次遍历树。
您的原始表达式说:给我所有具有A或B(//*
)子元素的元素([A|B]
),因为当评估谓词部分([]位)时,上下文节点是您正在检查的节点,因此谓词中的任何内容都与该上下文相关。