将xml转换为已排序的字典

时间:2009-03-17 09:37:14

标签: c# xml

我有一个类似于此的xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<data>
    <resource key="123">foo</resource>
    <resource key="456">bar</resource>
    <resource key="789">bar</resource>

</data>

我想把它作为键值对放入一个Dictionary(已排序)。 即: 123:FOO, 456:杆...等

密钥未知。

我该怎么做?

5 个答案:

答案 0 :(得分:8)

这看起来像是Linq到Xml的工作

    static void Main(string[] args)
    {            
        XDocument yourDoc = XDocument.Load("the.xml");
        var q = from c in yourDoc.Descendants("resource")
                orderby (int) c.Attribute("key")
                select c.Attribute("key").Value + ":" + c.Value;

        foreach (string s in q)
            Console.WriteLine(s);                            
        Console.ReadLine();
    }

答案 1 :(得分:6)

如果不使用Linq并仅使用XmlDocument

,这实际上更容易
SortedDictionary<string, string> myDict = new SortedDictionary<string, string>();
foreach (XmlElement e in myXmlDocument.SelectNodes("/data/resource"))
{
   myDict.Add(e.GetAttribute("key"), e.Value);
}

答案 2 :(得分:5)

试试这个,

string s = "<data><resource key=\"123\">foo</resource><resource key=\"456\">bar</resource><resource key=\"789\">bar</resource></data>";
XmlDocument xml = new XmlDocument();
xml.LoadXml(s);
XmlNodeList resources = xml.SelectNodes("data/resource");
SortedDictionary<string,string> dictionary = new SortedDictionary<string,string>();
foreach (XmlNode node in resources){
   dictionary.Add(node.Attributes["key"].Value, node.InnerText);
}

答案 3 :(得分:2)

使用LINQ:

加载文档XDocument.LoadXDocument.Parse

var xml = XDocument.Load(...);

迭代有序序列:

var sequence = from e in xml.Root.Elements() 
               let key = (string)e.Attribute("key")
               order by key
               select new { 
                 Key = key, 
                 Value = (string)e 
               };

答案 4 :(得分:0)

我会用XSLT转换来做这件事。你需要用C#做这个工作吗?如果没有,您可以简单地创建一个XSLT文档,该文档解析所有资源标记并输出key:value。很容易完成。这是你想要的解决方案吗?