如果我的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
答案 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"
。