我正在寻找一种使用Linq将XmlDocument
转换为Dictionary<string, string>
的好方法。
我的xml格式如下:
<config>
<field>value</field>
<field2>value2</field2>
</config>
我想把它放到一个字典中,键值对看起来像这样:
字段,值
field2,value2
我在想我应该使用Linq这样做,但我不确定语法。
答案 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);
}