将XML转换为排序字典

3

我有一个类似于这样的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>

我希望将这些内容作为键值对放入一个(排序的)字典中。 例如: 123:foo, 456:bar...等等
键是未知的。
我该如何做到这一点?
5个回答

8

这似乎是Linq to 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();
    }

6

请试试这个方法:

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);
}

啊,英雄所见略同。我的版本更为简洁,但方法是一样的。 - Robert Rossney

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

使用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 
               };

0
我会使用XSLT转换来完成这个任务。您需要使用C#来完成吗?如果不需要,您可以简单地创建一个XSLT文档,通过所有资源标记并为您按键:值进行排序。非常容易完成。这是您想要的解决方案吗?

你对转换输出做什么?您仍然需要将其放入字典中。 - annakata
你可以按照自己的喜好输出。HTML、TXT,随你怎么选。对吧? - Chris Dale
但是没有任何形式的XSLT输出实现IDictionary。 - annakata
哦,我不知道有一种特殊的字典实现。=) - Chris Dale
@anakata 使用XSLT生成C#(或任何其他语言)源代码非常简单。因此,可以生成定义字典并向其中添加键值对的代码。ChrisAD正确指出,专门设计用于树转换的最佳工具是XSLT。 - Dimitre Novatchev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接