Попробуйте что-то вроде этого:
var result = XElement.Load("Example.xml")
.Elements("Person")
.Select(p => new {
Id = p.Attribute("Id").Value,
Fields = p.Descendants("Field").Select(f => new {
Id = f.Attribute("FieldId").Value,
Value = f.Attribute("Value").Value
})
});
Это даст вам последовательность анонимных типов, которые выглядят примерно так:
class Anonymous
{
public String Id { get; }
public IEnumerable<AnonymousSubtype> Fields { get; }
}
class AnonymousSubtype
{
public String Id { get; }
public String Value { get; }
}
Причина, по которой я использовал Descendants
метод извлечения полей заключается в том, что элемент, с которым я впервые работаю, является элементом Person
.Так как Elements
возвращает только узлы, которые являются прямыми дочерними элементами, для извлечения полей не будет работать, поэтому вместо этого я использовал Descendants
.
Для перечисления результатов вы можете сделать это:
foreach (var person in result)
{
Console.WriteLine("Person Id: {0}", person.Id);
foreach (var field in person.Fields)
{
Console.Write(" Field Id: {0}", field.Id);
Console.WriteLine(" Field Value: {0}", field.Value);
}
}