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

本文关键字:XPath 选择 节点 父节点 | 更新日期: 2023-09-27 18:11:14

我有一个看起来像这样的XML:

<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之下?

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

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

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

但是如果你只想让cid="0x15ad"cid="0x1310"下的节点,使用这个:

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

示范(点击"测试"查看结果)

我相信你需要的是:

//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();