如何将xml字符串转换为字典列表?

时间:2010-09-06 11:47:45

标签: c# xml

string xml="< theme>

<colors>

<color>
<code>1</code>
<name>blue</name>
<priority>5</priority>
</color>

<color>
<code>2</code>
<name>red</name>
<priority>2</priority>
</color>

<color>
<code>3</code>
<name>green</name>
<priority>7</priority>
</color>

</colors>
</theme>"

我想将这个xml字符串转换为名为“colors”的字典列表。例如:

List< Dictionary< string, string>> colors=new List< Dictionary< string, string>>();   
colors=//Magic happens here  

colors[0]["name"] would return 'blue'  
colors[2]["priority"] would return '7'  

感谢。

3 个答案:

答案 0 :(得分:3)

假设您正在使用LINQ to XML,那相对容易:

var query = doc.Descendants("colors")
               .Elements() // Get to each "color" element
               .Select(outer => outer.Elements()
                                     .ToDictionary(x => x.Name.LocalName,
                                                   x => x.Value))
               .ToList();

如果有任何对您没有意义,请告诉我。

编辑:哎呀,那之前会是List<Dictionary<XName, string>>。修正:)

编辑:我在评论中注意到您使用的是完全限定名称。尝试使用这些使用指令:

using System.Linq;
using System.Xml.Linq;

他们需要找到扩展方法。

答案 1 :(得分:1)

使用LINQ:

        var d = XDocument.Parse(x);
        var l = new List<Dictionary<string, string>>(
            from color in d.Root.Element("colors").Elements("color")
            select color.Elements().ToDictionary(k => k.Name.LocalName, k=>k.Value)

            );

(其中X是字符串)

答案 2 :(得分:0)

如果您使用LINQ to XML,我会发现Jon的答案更方便,否则您可能需要检查xsd.exe工具

http://msdn.microsoft.com/en-us/library/x6c1kb0s%28VS.71%29.aspx

http://shadym.blogspot.com/2009/12/how-to-create-c-class-from-xml-file-via.html