2012-02-01 29 views
5

Parece que no puede encontrar cómo analizar adecuadamente esta usando XElement:análisis XML utilizando XElement

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

me gustaría sacar esto a una lista donde es tres cadenas subclase, el contexto, la clave.

Respuesta

22

Su entrada no es XML válido, le faltan etiquetas de cierre en los elementos del mensaje interno. Pero suponiendo que el formato era válida, se podría analizar fuera de su estructura como en:

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

También puede utilizar XDocument para un documento XML completo, y utilizar el método en lugar de ParseLoad si estuviera utilizando un archivo XML o una secuencia, por ejemplo. Además, puede seleccionar una clase concreta si tiene una definida. Dada una definición de clase de

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

Usted podría utilizar select new Message en la consulta, y el resultado sería un List<Message>, mientras que en este momento se trata de una lista de un tipo anónimo.