我有一个类似于此的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:杆...等
密钥未知。
我该怎么做?
答案 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.Load
或XDocument.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。很容易完成。这是你想要的解决方案吗?