这个简单的XPath查询是否正确?

时间:2011-02-04 21:28:05

标签: xml xpath

我的文档格式如下:

<Root>
    <A />
    <C />
    <B />
    <A>
        <B>
            <A />
            <C /> 
        </B>
    </A>
</Root>

我想“抓住”所有元素AB,并将它们列在新文档中:

<A /> <B /> <A /> <B /> ...

使用XPath,查询是否(使用Root作为上下文节点):

.//*[A | B]

3 个答案:

答案 0 :(得分:3)

使用

//*[self::A or self::B]

这将选择文档中AB

的所有元素

仅遍历文档:)

答案 1 :(得分:2)

根据 Welbog 的回答,我想出了这个:

.//*[name()="A" or name()="B"]

它做了所谓的。

答案 2 :(得分:2)

你可以简单地写//A|//B(前一个似乎没有用,除了在一个在线xpath测试器中,它会教我信任它们)。虽然这会两次遍历树。

您的原始表达式说:给我所有具有A或B(//*)子元素的元素([A|B]),因为当评估谓词部分([]位)时,上下文节点是您正在检查的节点,因此谓词中的任何内容都与该上下文相关。