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