2011-12-13 10 views
0

初心者....LINQ to XMLを使用してC#でこのコードのListオブジェクトを使用するにはどうすればよいですか?ここではC#へ

私は次のコードを持っている:

var xdoc = XDocument.Parse(xml); 
      var result = xdoc.Root.Elements("item") 
       .Select(itemElem => itemElem.Elements().ToDictionary(e => e.Name.LocalName, e => e.Value)) 
       .ToList(); 

をしかし、私は、このようなresult.Itemとして、任意のListオブジェクト私と同じようにresultを使用しようとすると、それは動作しません。 。

私は間違っていますか?結果が、私のコードで操作できる通常のListオブジェクトとして戻ってこないのはなぜですか?リストオブジェクトを別のものにする必要がありますか?

私は、最初の辞書項目をリストから取り出して使用しようとしています。

答えて

1

は、あなたが何であるかによって異なります。あなたのコードは現在List<Dictionary<string,string>>を生成しています。したがって、リストの各エントリは辞書になります。

あなたは通常、リストの要素にアクセスするとあなたはすなわち

string firstResult = result[0]["key"]; 

最初の部分[0]は、第二部["key"]が辞書のインデクサーであるリストのインデクサで、各辞書にアクセスすることができます - これは戻ってきますあなたのリストの最初の辞書のキー"key"の値。

これは、リストに少なくとも1つのエントリがあることを前提としていますが、チェックする必要があります。

+0

が、どのように私はそのリスト内の最初の辞書にアクセスできますか? –

+1

結果[0]は結果のリストの最初の辞書です。リストが空の場合、result [0]は例外をスローします。リストが空であるかどうかテストして、result.Any()またはresult.Count()> 0をテストすることができます。var x = result.FirstOrDefault()を使用してxにnullをテストできます。 – dthorpe

0

これはList<Dictionary<String, String>>です。リストの各要素は辞書です。

あなたがそれでやりたかったことを知るのに役立ちます。

しかし、いくつかの例は以下のとおりです。[OK]を

//Get the First Dictionary Item, then Iterate through all the items in the first dictionary. 
var firstItem = results.First(); 
foreach(var kvPair in firstItem) 
{ 
    var key = kvPair.Key; 
    var val = kvPair.Value; 
} 

//Loop through each Dictionary getting values from each. 
foreach (var result in results) 
{ 
    var wordValue = result["word"]; 
    var defValue = result["def"]; 
} 

//Create a list of all the values for the Elements with the key "word". 
var valuesForAllWords = 
    results 
    .Select(r => r["word"]) 
+0

私は、最初の辞書項目をリストから取り出して使用しようとしています。 –

+0

@EthanAllenアップデートの回答 – DaveShaw