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にあり、2番目のパラメーターはこのタイプのカウントです。

ありがとう。

4

2 に答える 2

6

LINQtoXMLをLINQtoObjectsと組み合わせると、これは非常に簡単になります。

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 に答える