Arslan Pervaiz
Arslan Pervaiz

Reputation: 1633

XML Parsing With Linq

I Want to Parse XML with Linq.

Here is My XML Data.

 <?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; }
            }

        }
    }

Can Anyone Please Help Me How To Add Adrress Into List in LINQ Query. As You Can See There Are Many Address Nodes Under The Person. So How I Can Add All Address into My List Object.

Upvotes: 0

Views: 358

Answers (1)

Jason C
Jason C

Reputation: 152

One way to get the list of elements would be to nest another linq query in your original linq query.

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")
            });

This pattern occurs all the time in linq to xml so i would remember it.

Upvotes: 3

Related Questions