2012-05-07 157 views
0

我想用Linq解析XML。用Linq解析XML

這是我的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查詢中添加Adrress到列表中。正如你所看到的那樣,在人之下有很多地址節點。所以如何將所有地址添加到我的列表對象中。

+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中,所以我會記住它。