将XmlDocument转换为Dictionary <string,string =“”> </string,>

时间:2012-01-21 03:48:24

标签: c# xml linq

我正在寻找一种使用Linq将XmlDocument转换为Dictionary<string, string>的好方法。

我的xml格式如下:

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

我想把它放到一个字典中,键值对看起来像这样:

字段,值
field2,value2

我在想我应该使用Linq这样做,但我不确定语法。

3 个答案:

答案 0 :(得分: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方法从文件加载XML。那么这种方法就足够了:

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

答案 1 :(得分: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);

答案 2 :(得分:2)

使用linq进行此操作的一种方法如下 使用

创建XML文档
XElement xDoc = XElement.Parse("<config><field>value</field><field2>value2</field2</config>");

为简单起见,我直接将您的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);
}