Как заполнить XML с помощью Linq?

Как заполнить объект человека с помощью LINQ следующим XML

<Results> 
  <Person name="Edwin"> 
    <DOB>1990-10-01</DOB>
    <Department>Engineering</Department> 
  </Person> 
  <Person name="Joe">
    <DOB>1979-10-01</DOB> 
    <Department>Engineering</Department> 
  </Person>
  <Person name="Eric"> 
    <DOB>1989-10-01</DOB>
    <Department>Sales</Department> 
  </Person>
</Results>

person user3390198    schedule 06.03.2014    source источник
comment
Рами, ты уже пробовал что-нибудь?   -  person Sergey Berezovskiy    schedule 07.03.2014


Ответы (1)


Предположим, что человек

public class Person
{
    public string Name { get; set; }
    public DateTime DateOfBirth { get; set; }
    public string Department { get; set; }
}

Разбор:

var xdoc = XDocument.Load(path_to_xml);
var people = from p in xdoc.Root.Elements("Person")
             select new Person {
                 Name = (string)p.Attribute("name"),
                 DateOfBirth = (DateTime)p.Element("DOB"),
                 Department = (string)p.Element("Department")
             };

Вы также можете использовать десериализацию xml. Добавьте атрибуты сериализации:

public class Results
{        
    [XmlElement("Person")]
    public List<Person> People { get; set; }
}

public class Person
{
    [XmlAttribute("name")]
    public string Name { get; set; }
    [XmlElement("DOB")]
    public DateTime DateOfBirth { get; set; }
    public string Department { get; set; }
}

И десериализовать результаты:

XmlSerializer serializer = new XmlSerializer(typeof(Results));
var results = (Results)serializer.Deserialize(File.OpenRead(path_to_xml));
var people = results.People;
person Sergey Berezovskiy    schedule 06.03.2014