2012-01-21 36 views
0

我正在尋找一種使用Linq將XmlDocument轉換爲Dictionary<string, string>的好方法。將XmlDocument轉換爲字典<string,string>

我的XML的格式是這樣的:

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

我想它放到字典與鍵值對這樣看:

領域,價值
場2,數值2

我想我應該使用Linq來做到這一點,但我不確定語法。使用LINQ做的

+0

在XML文檔或字符串中是否有單個節點? – 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

一種方法是以下 創建使用

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

爲了簡單的XML文檔,我的內聯XML片斷直接進入解析。

然後,您可以創建一個查詢有以下

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

然後就是查詢轉換爲使用一個簡單的for each循環的字典。

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

+1。更直接的方法是使用「ToDictionary」方法。查看我的回答以獲取示例。 –

5

使用的XmlDocument,根據您的問題,您可以使用此方法來獲得一個Dictionary<string, string>

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,您可以使用該方法Parse從字符串加載XML,或者使用Load方法從文件加載它。那麼這種方法應該就足夠了:

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

+1,因爲我喜歡你的方法比一點多礦。你的方法比我的直接更直接,現在我知道了ToDictionary調用。 –

相關問題