xml到linq查询写

时间:2012-05-28 16:05:57

标签: c# xml linq

我有一个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查询。

帮我获得这个输出......

2 个答案:

答案 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();