2017-08-30 62 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::*將選擇所有三個節點。

相關問題