2012-05-28 3 views
-3

У меня есть объект xDocument и который загружается через XML-файл, который содержит данные ниже.xml to linq query написать

<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> 

Я хочу написать Linq запрос на XDocument и получите ниже заданного выхода

note(header,from,to,message) 
description(item1,language) 

** Описание. Мне нужен отдельный список имен узлов, за которыми следует узел Note. Но я не хочу писать длинный foreach или цикл. Но я хочу написать простой запрос linq для объекта xDocument.

Помоги мне, чтобы получить этот вывод ...

+1

[Что вы пробовали?] (Http://whathaveyoutried.com) – caesay

+1

Что вы имеете в виду "получить ниже данный выход"? Последовательность объектов «Примечание» или фактических строк? –

+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-мя свойствами: заголовок, From, To и сообщение.

+0

Здесь мой xml содержит множество разных узлов, ожидающих только заметку. Поэтому я не могу записать его с заголовком, от, до имени элемента etc внутри запроса. –

+0

Не делает нулевой чек. И он попросил вернуть строку. – caesay

0

Без harcoded 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();