2012-05-07 2 views
0

Я хочу проанализировать XML с Linq.XML-анализ с Linq

Вот мои данные XML.

<?xml version="1.0" encoding="utf-8" ?> 
    <people> 
     <person> 
     <firstname>Kate</firstname> 
     <lastname>Smith</lastname> 
     <Address>Address</Address> 
     <Address>Address2</Address> 
     <Address>Address3</Address> 
     <age>27</age> 
     </person> 
     <person> 
     <firstname>Tom</firstname> 
     <lastname>Brown</lastname> 
     <Address>Address4</Address> 
     <Address>Address5</Address> 
     <Address>Address6</Address> 
     <age>30</age> 
     </person> 
     <person> 
     <firstname>Tim</firstname> 
     <lastname>Stone</lastname> 
     <Address>Address7</Address> 
     <Address>Address8</Address> 
     <Address>Address9</Address> 
     <age>36</age> 
     </person> 
     <person> 
     <firstname>Ann</firstname> 
     <lastname>Peterson</lastname> 
     <Address>Address10</Address> 
     <Address>Address11</Address> 
     <Address>Address12</Address> 
     <age>27</age> 
     </person> 
    </people> 

public class XmlParser 
    { 
     List<Person> List = new List<Person>(); 
     public XmlParser() 
     { 
      XDocument loadedData = XDocument.Load("Persons.xml"); 
      var data = (from query in loadedData.Descendants("person") 
       select new Person 
       { 
        FirstName = (string)query.Element("firstname"), 
        LastName = (string)query.Element("lastname"), 
        //Address = (List<string>)query.Element("Address"), // I Want To Load All Address Into My List 
        Age = (int)query.Element("age") 
       }).ToList(); 
      List.AddRange(data); 
     } 

     public class Person 
     { 
      string firstname; 
      string lastname; 
      List<string> address; 
      int age; 

      public string FirstName 
      { 
       get { return firstname; } 
       set { firstname = value; } 
      } 

      public string LastName 
      { 
       get { return lastname; } 
       set { lastname = value; } 
      } 

      public List<string> Address 
      { 
       get { return address; } 
       set { address = value; } 
      } 

      public int Age 
      { 
       get { return age; } 
       set { age = value; } 
      } 

     } 
    } 

Может ли кто-нибудь помочь мне, как добавить адрес в список в запросе LINQ. Как вы можете видеть, существует множество адресных узлов под человеком. Итак, как я могу добавить весь адрес в свой объект списка.

+0

query.Elements ("Address"). ToList()? –

+0

Список чего? Вам нужно точно подумать о том, какую структуру вы хотите. У вас есть тип Person? Если вам не нужно было получать его из XML, но он мог бы жестко закодировать его, как бы это выглядело? –

ответ

3

Одним из способов получения списка элементов было бы вложить другой запрос linq в исходный запрос linq.

var loadedData = XDocument.Load("Persons.xml"); 
var data = (from query in loadedData.Descendants("person") 
      select new Person 
      { 
       FirstName = (string)query.Element("firstname"), 
       LastName = (string)query.Element("lastname"), 
       Address = (from address in query.Elements("Address") 
          select address.Value).ToList(), 
       Age = (int)query.Element("age") 
      }); 

Этот шаблон происходит все время в linq до xml, поэтому я бы его запомнил.