0

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.

2
  • query.Elements("Address").ToList() ? Commented May 7, 2012 at 18:31
  • A list of what? You need to think of exactly what structure you want. Do you have a Person type? If you didn't need to get it from the XML, but could hard-code it, what would that look like? Commented May 7, 2012 at 18:31

1 Answer 1

3

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.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.