0

我有以下xml:

<Places Count='50'>
<Place ID='1' Row='1' Place='1' Type='1' Fragment='0'></Place>
<Place ID='2' Row='1' Place='2' Type='1' Fragment='0'></Place>
<Place ID='3' Row='1' Place='3' Type='2' Fragment='0'></Place>
<Place ID='4' Row='1' Place='4' Type='2' Fragment='0'></Place>
<Place ID='5' Row='1' Place='5' Type='2' Fragment='0'></Place>
//other tags
</Places>

我想获得Dictionary<int, int>以下内容:

1,2  // 0 element in the Dictionary (type =1; count = 2)
2,3; // 1 element in the Dictionary (type =2; count = 3)

第一个参数是Typexml,第二个参数是这个类型的count。

谢谢。

4

2 回答 2

6

LINQ to XML 与 LINQ to Objects 相结合使这变得非常简单:

var dictionary = doc.Descendants("Place")
                    .GroupBy(x => (int) x.Attribute("Type"))
                    .ToDictionary(g => g.Key, g => g.Count());

它的效率并不高,但我会坚持使用这种实现,直到我发现它成为一个问题。

请注意,在字典中谈论“0 元素”是一种误导——字典没有可靠的顺序:你不应该假设如果你遍历键/值对,你会以任何特定的顺序看到它们。

于 2012-05-15T05:50:14.417 回答
1

查询语法

 var dict = (from place in root.Descendants("Place")
       group place by (int)place.Attribute("Type") into g
        select g).ToDictionary(g=>g.Key, g=>g.Count());
于 2012-05-15T05:59:07.613 回答