2012-02-01 16 views
5

nie wydaje się znaleźć sposób, aby odpowiednio analizować to, używając Xelement:analizowania XML za pomocą Xelement

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

Chciałbym, aby to się do listy, gdzie jest trzy ciągi podklasa, kontekst, klucz.

Odpowiedz

22

Twoje dane wejściowe nie są prawidłowe XML, brakujące znaczniki zamykające w wewnętrznych elementach komunikatu. Ale zakładając, że format był poprawny, można analizować swoje struktury, jak w:

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

Można również użyć XDocument dla pełnego dokumentu XML i zastosować metodę zamiast ParseLoad jeśli były przy użyciu pliku XML lub strumień, na przykład. Dodatkowo możesz wybrać konkretną klasę, jeśli ją posiadasz. Biorąc pod uwagę definicję klasy

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

Można użyć select new Message w zapytaniu, a wynik byłby List<Message>, podczas gdy teraz jest to lista typ anonimowy.

Powiązane problemy