XPath - 根据属性值选择不同级别的多个节点

时间:2014-04-01 05:34:46

标签: xml xpath

如果我的XML看起来像:

<root>
    <entry>
        <a>
            <b>Some text</b>
        </a>
        <c>
            <d>Some other text</d>
        </c>
        <e type="Blah">123</e>
    </entry>
    <entry> ... </entry>
</root>

如何从<b>的类型等于“Blah”的条目中选择所有<d><e>

我尝试过类似的事情:

//entry/a/b[../../e[@type="Blah"] | //entry/c/d[../../e[@type="Blah"]

但这只会返回<b>。注意:如果重要的话,我是从Saxon HE 9.5.1

运行的

2 个答案:

答案 0 :(得分:2)

试试这个

//entry[e[@type='Blah']]//*[name() = 'b' or name() = 'd']

在这里演示 - http://www.xpathtester.com/xpath/e93421dcb67f914b11108ddabb53d1dc

答案 1 :(得分:1)

您可以使用双斜杠//来匹配特定节点的所有后代。例如:

//entry[//e/@type="Blah"]

这将返回文档中的所有入口节点 (前面的//匹配所有节点),其中e后代 >在他们下面,属性type等于"Blah"