2012-02-01 3 views
5

Не могу найти, как правильно анализировать это с помощью XElement:XML синтаксический анализ с использованием XElement

<messages> 
    <message subclass="a" context="d" key="g"> 
    <message subclass="b" context="e" key="h"> 
    <message subclass="c" context="f" key="i"> 
</messages> 

Я хотел бы получить это в список, где есть три строки подкласс, контекст, ключ.

ответ

22

Ваш вход недействителен XML, он не имеет закрывающих тегов для внутренних элементов сообщения. Но если предположить, что формат был действительным, вы могли бы разобрать структуру, как в:

string xml = @"<messages> 
        <message subclass=""a"" context=""d"" key=""g""/> 
        <message subclass=""b"" context=""e"" key=""h""/> 
        <message subclass=""c"" context=""f"" key=""i""/> 
       </messages>"; 

var messagesElement = XElement.Parse(xml); 
var messagesList = (from message in messagesElement.Elements("message") 
        select new 
        { 
         Subclass = message.Attribute("subclass").Value, 
         Context = message.Attribute("context").Value, 
         Key = message.Attribute("key").Value 
        }).ToList(); 

Вы также можете использовать XDocument для полного документа XML, и использовать Load метод вместо Parse, если вы используете файл XML или поток, например. Кроме того, вы можете выбрать конкретный класс, если у вас есть определенный. Учитывая определение класса

class Message 
{ 
    public string Subclass { get; set; } 
    public string Context { get; set; } 
    public string Key { get; set; } 
} 

Вы можете использовать select new Message в запросе, и результат будет List<Message>, в то время как сейчас это список анонимного типа.

Смежные вопросы