2014-07-02 134 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(); 

返回带有一个项目的列表。