在C#中对XPathSelectElements的结果进行分组

时间:2014-03-11 18:33:06

标签: c# xml xpath

我在以下结构中有一个xml

<root>     
    <Node>
        <value>a</value>
        <value>b</value>
        <value>c</value>
    </Node>
    <Node>
        <value>d</value>
        <value>e</value>
        <value>f</value>

    </Node>
    <Node>
        <value>x</value>
        <value>y</value>
    </Node>  
</root>

我想使用XPath ./ root / Node / value 来选择按其部分分组的节点。所以结果是3个列表[a,b,c],[d,e,f],[x,y]。

如何使用C#实现这一目标?

提前致谢。

2 个答案:

答案 0 :(得分:2)

使用Linq To Xml

var xDoc = XDocument.Load(filename);

var lists = xDoc.Descendants("Node")
            .Select(n => n.Elements("value").Select(v => v.Value).ToList())
            .ToList();

var lists = xDoc.XPathSelectElements("//Node/value")
            .GroupBy(x => x.Parent)
            .Select(x => x.Select(y => y.Value).ToList())
            .ToList();

答案 1 :(得分:0)

您可以使用LINQ to XML轻松实现目标。在大多数情况下,最好将您的收藏设为IEnumerable而不是List

var doc = XDocument.Parse(xml);
var nodes = doc.Descendants("Node")
            .Select(n => n.Elements().Select(e => e.Value));