我有一个xDocument对象,它通过一个包含下面给定数据的xml文件加载。
<note>
<header>This is xml2linq -- Part1.</header>
<from>From me</from>
<to>to stackoverflow</to>
<message>ohh wow</message>
</note>
<note>
<header>This is xml2linq -- Part2 .</header>
<to>to stackoverflow</to>
<message>ohh wow</message>
</note>
<note>
<header>This is xml2linq -- Part3 .</header>
<from>From me</from>
<to>to stackoverflow</to>
</note>
<description>
<item1>ohh nice</item1>
</description>
<description>
<language>c-sharp</language>
<item1>Inheritance</item1>
<description>
我想在xDocument上编写linq查询并获得以下给定的输出
note(header,from,to,message)
description(item1,language)
**说明。 我想要一个不同的节点名列表,后面跟着Note节点。但我不想写一个长期的foreach或for循环。但我想在xDocument对象上编写一个简单的linq查询。
帮我获得这个输出......
答案 0 :(得分:0)
var doc = XDocument.Parse(" -- your XML here -- ");
var notes = from note in doc.Elements("note")
select new {
Header = (string)note.Element("header"),
From = (string)note.Element("from"),
To = (string)note.Element("to"),
Message = (string)note.Element("message"),
};
这将为您提供一个包含4个属性的匿名对象列表:Header,From,To和Message。
答案 1 :(得分:0)
没有硬编码header,from,to,..
等
XDocument xDoc = XDocument.Load(....);
List< List<KeyValuePair<string,string>> > list =
xDoc.Descendants("note")
.Select(note => note.Elements()
.Select(e => new KeyValuePair<string, string>(e.Name.LocalName, e.Value))
.ToList())
.ToList();