如何选择具有特定子节点的父节点?

时间:2014-03-18 09:32:44

标签: c# xml linq-to-xml

这是我的 XML

<A>
    <B id = "1">
        <R>
        <C id="ABC" />
    </B>
    <B id = "2" >
        <R>
        <C id="ABC" />
    </B>
    <B id = "3" >
        <R>
        <C id="XYZ" />
    </B>
    <B id = "4">
        <R>
    </B>
    <B id = "5">
        <R>
    </B>
 </A>

我只需要选择包含子元素 <B> <C> 节点,输出应该像,

<B id = "1">
        <R>
        <C id="ABC" />
</B>
<B id = "2" >
        <R>
        <C id="ABC" />
</B>
<B id = "3" >
        <R>
        <C id="XYZ" />
</B> 

Descendants("B").Descendants("C")没有帮助。

任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:4)

XElement xml = XElement.Parse("xmlData");//or load...
var bElements = xml.Descendants("B").Where(x => x.Descendants("C").Count() > 0);

或者,正如Selman22所建议的那样,您可以使用:

var bElements = xml.Descendants("B").Where(x => x.Descendants("C").Any());

答案 1 :(得分:1)

XElement element = XElement.Parse("data.xml");
var query = element.Descendants("C")
            .Where(c => c.Parent.Name == "B")
            .Select(c => c.Parent).Distinct()
            .ToList();