Ваш ввод не является допустимым 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>
, тогда как сейчас это список анонимного типа.