2012-01-21 15 views
0

Linqを使用してXmlDocumentDictionary<string, string>に変換する良い方法をお探しです。XmlDocumentをDictionaryに変換する<string、string>

私のXMLは次のようにフォーマットされ

<config> 
    <field>value</field> 
    <field2>value2</field2> 
</config> 

私はこのように見ているキーと値のペアを辞書にこれを入れたいのですが:

フィールド、値
フィールド2、value2の

私はLinqを使ってこれを行うべきだと思っていますが、構文についてはわかりません。

LINQでそれを行う1つの方法は、以下のことになる 簡単にするために

XElement xDoc = XElement.Parse("<config><field>value</field><field2>value2</field2</config>"); 

を使用してXMLドキュメントを作成

+0

XMLドキュメントまたは文字列にノードが1つありますか? – adatapost

答えて

4

は、私はその良い方法が、そのクリーン&シンプル..

XElement xdoc = XElement.Load("yourFilePath"); 
Dictionary<string, string> result = (from element in xdoc.Elements() select new KeyValuePair<string, string>(element.Name.ToString(), element.Value)).ToDictionary(x => x.Key, x => x.Value); 
+3

きれいにするかもしれない...たぶん...読みやすい...間違いなく。 – MyKuLLSKI

+0

まあ、linqそのようなのは、今日の技術を知っている必要があります...アイデアは非常に短い解決策を提供することでしたが、あなたはforeachステートメントに行くことができます... –

2

、私が直接解析にあなたのXMLスニペットをインライン化。

その後、あなたは各ループのための単純なを使用して辞書にそのクエリを変換すると、次の

var query = from xEle in xDoc.Descendants() 
select new { tag = xEle.Name.LocalName, value = xEle.Value }; 

でクエリを作成することができます。

Dictionary<string, string> dictionary = new Dictionary<string, string>(); 
foreach (var CurNode in query) 
{ 
    dictionary.Add(CurNode.tag, CurNode.value); 
} 
+0

+1努力のために。もっと直接的なアプローチは、 'ToDictionary'メソッドを使うことです。例は私の回答を参照してください。 –

5

は、あなたの質問ごとに、あなたはDictionary<string, string>を取得するには、このアプローチを使用することができ、XmlDocumentを使用する場合は知りません。

string input = @"<config> 
    <field>value</field> 
    <field2>value2</field2> 
</config>"; 

var xml = new XmlDocument(); 
xml.LoadXml(input); 

var dict = xml.SelectNodes("/config/*") 
       .Cast<XmlNode>() 
       .ToDictionary(n => n.Name, n => n.InnerText); 

あなたがXElementを使用できる場合は、文字列からXMLを読み込む、またはファイルからそれをロードするLoadメソッドを使用することParse方法のいずれかを使用することができます。次に、このアプローチで十分です:

var xml = XElement.Parse(input); 
var dict = xml.Elements() 
       .ToDictionary(n => n.Name.LocalName, n => n.Value); 
+0

+1私はあなたの方法がかなり好きです鉱山。あなたのメソッドは私のものよりもはるかに直接的であり、現在はToDictionary呼び出しを認識しています。 –

関連する問題