2014-07-02 189 views
0

我有一個看起來像這樣的XML:XPath的選擇節點與特定父

<item cid="0x1310"> 
    <item cid="0x15ad"> 
    </item> 

    <item cid="someOtherCode"> 
     <item cid="0x15ad"> 
     </item> 
    </item> 
</item> 

我要選擇nodescid="0x15ad",根據cid="0x1310"

是專門到目前爲止,我有:

//item[not(@name='Version') and(@cid='0x1310')]//item[@cid='0x15ad'] 

問題是,我帶來了一切加上其他cid值下的結果。

我該如何特別檢索parent下的那些?

回答

0

// operator選擇當前節點(或文檔)的所有後代,而不僅僅是直接子節點。試試這個:

//item[not(@name='Version') and(@cid='0x1310')]/item[@cid='0x15ad'] 

但如果你只是想cid="0x1310"下與cid="0x15ad"節點,使用:

//item[@cid='0x1310']/item[@cid='0x15ad'] 

Demonstration(點擊 '測試',看看效果)

+0

使用一個'/'是我的想法,但現在沒有帶來任何東西。 :/我覺得我還有其他問題。不過謝謝。我的XML更復雜,我簡化它。 –

0

我相信你需要是:

//item[@cid="0x15ad" and ../@cid="0x1310"] 

C#代碼

var xdoc = XDocument.Parse(@" 
<item cid=""0x1310""> 
    <item cid=""0x15ad""> 
    </item> 

    <item cid=""someOtherCode""> 
     <item cid=""0x15ad""> 
     </item> 
    </item> 
</item> 
"); 
var items = xdoc.XPathSelectElements(@"//item[@cid=""0x15ad"" and ../@cid=""0x1310""]").ToList(); 

返回帶有一個項目的列表。