我想找到(绑定)XML中找到的路径上的所有节点。 请考虑以下XML代码段。
<a at="dat1">
<b at="dat2">
<c at="dat3">blah</c>
<c at="dat4">blah</c>
</b>
<b at="dat5">
<c at="dat6">blah</c>
<c at="dat7">blah</c>
</b>
</a>
<a at="dat8">
<b at="dat2">
<c at="dat4">blah</c>
<c at="dat9">blah</c>
</b>
<b at="dat10">
<c at="dat9">blah</c>
<c at="dat4">blah</c>
</b>
</a>
xpath查询/ a / b [@ at =“dat2”] / c [@ at =“dat4”]将仅返回两个c节点。但是,我想检索满足给定条件的路径(a,b和c)上的所有节点。在这种情况下,我期待a,b,c节点的两个三元组。 xpath表达式可能是任意复杂的。 xpath引擎会找到三元组,但只返回c个节点。
我当然可以编写多个xpath表达式来获取每个元素。但这需要xpath引擎多次搜索,这不是必需的,因为它已经在第一次搜索中找到了所有绑定。
如何在xpath中实现此目的?如果不可能,我应该使用哪种XML查询语言?
答案 0 :(得分:2)
使用XPath axis ancestor-or-self
。它...
选择当前节点和当前节点本身的所有祖先(父级,祖父级等)
因此/a/b/c/ancestor-or-self::*
将选择所有三个节点。
答案 1 :(得分:1)
尝试以下XPath
/a/descendant-or-self::*
它应该返回a
元素以及b
和c
如果a
的后代多于b
和c
,则可以使用下面的情况:
//a/descendant-or-self::*[name()=('a', 'b', 'c')]