XPath选择具有特定父节点的节点

时间:2014-07-02 15:43:02

标签: c# xml xpath

我有一个如下所示的XML:

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

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

我想选择具有nodes cid="0x15ad"的{​​{1}} cid="0x1310"

到目前为止,我有:

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

问题是这会给我带来一切加上其他cid值以下的结果。

如何具体检索parent下的那些?

2 个答案:

答案 0 :(得分:0)

// operator选择当前节点(或文档)的所有后代,而不仅仅是直接子节点。试试这个:

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

但是,如果您只想在cid="0x15ad"下使用cid="0x1310"的节点,请使用:

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

Demonstration(点击&#39;测试&#39;查看结果)

答案 1 :(得分: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();

返回包含一个项目的列表。