2012-05-07 3 views
0

Linq로 XML을 구문 분석하고 싶습니다.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

무엇의 목록? 당신은 당신이 원하는 구조를 정확히 생각할 필요가 있습니다. 사람 유형이 있습니까? 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로 발생하므로 기억합니다.

관련 문제