2017-08-30 68 views
0

我想查找(绑定)XML中找到的路径上的所有节点。 考虑以下XML片段。如何将节点绑定到xpath中的变量?

<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 [@在= “DAT2”]/C [@在= “DAT4”]将只返回两个C节点。不过,我想检索满足给定条件的路径(a,b和c)上的所有节点。在这种情况下,我期待着a,b,c节点的两个三元组。 xpath表达式可以是任意复杂的。 xpath引擎会找到三元组,但只返回c个节点。

我当然可以编写多个xpath表达式来获取每个元素。但是这需要xpath引擎多次搜索,这并不是必须的,因为它已经找到了第一次搜索中的所有绑定。

如何在xpath中实现此目的?如果不可能,我应该使用哪种XML查询语言?

+0

到目前为止你做了什么?你至少有Google吗? – Reborn

+0

@Reborn我在发布问题之前做过Google,但没有找到解决方案。我意识到这个问题还不够清楚,因此我编辑了它。希望有所帮助。 –

回答

1

尝试下面的XPath

/a/descendant-or-self::* 

它应该返回你a元素以及bc

您可以在下面使用的情况下,如果a已经不仅仅是bc更多的后代:

//a/descendant-or-self::*[name()=('a', 'b', 'c')] 
2

使用XPath axisancestor-or-self。它...

选择当前节点的所有祖先(父母,祖父母等)以及当前节点本身

所以/a/b/c/ancestor-or-self::*将选择所有三个节点。

相关问题