0

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 クエリのリストにアドレスを追加する方法を教えてください。ご覧のとおり、Person の下に多数の Address ノードがあります。では、すべてのアドレスをリスト オブジェクトに追加するにはどうすればよいでしょうか。

4

1 に答える 1

3

要素のリストを取得する 1 つの方法は、元の 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 to xml で常に発生するので、覚えておきます。

于 2012-05-07T18:46:30.773 に答える