Q:

Problems with looping over XML in C# MVC

Hi there I'm trying to parse an XML file into a list of contacts, but having problems:
    public List<ContactModel> GetContacts()
    {

        var doc = XDocument.Load(HttpContext.Current
                                            .Server
                                            .MapPath(@"..\App_Data\Contacts.xml"));

        var result = from items in doc.Descendants("Directory")
                     select new ContactModel()
                                {
                                    Id = items.Attribute("ID").Value,
                                    FirstName = items.Attribute("FirstName").Value,
                                    LastName = items.Attribute("LastName").Value,
                                    Telephone = items.Attribute("Telephone").Value,
                                    Email = items.Attribute("Email").Value,
                                    Room = items.Attribute("Room").Value,
                                    Building = items.Attribute("Building").Value,
                                    Location = items.Attribute("Location").Value
                                };

        List<ContactModel> contactList = new List<ContactModel>();
        foreach (var item in result)
        {
            contactList.Add(item);
        }

        return contactList;
    }

I get a null exception when it's trying to loop, what am I doing wrong?
This is my XML
<?xml version="1.0" standalone="yes"?>
<ContactDirectory>
  <Directory>
    <ID>1</ID>
    <FirstName>Peter</FirstName>
    <LastName>Sutt</LastName>
    <Telephone>777888</Telephone>
    <Email>pett@gmail.com</Email>
    <Room>3.44</Room>
    <Building>Westside</Building>
    <Location>Leeds</Location>
  </Directory>
  <Directory>
    <ID>2</ID>
    <FirstName>Fred</FirstName>
    <LastName>West</LastName>
    <Telephone>1234</Telephone>
    <Email>fred@west.com</Email>
    <Room>1.23</Room>
    <Building>Cromwell St</Building>
    <Location>Gloster</Location>
  </Directory>
  <Directory>
</ContactDirectory>

A:

Beebul, They are Elements not Attributes
var contactList = (from items in doc.Descendants("Directory")
                select new ContactModel()
                {
                    Id = items.Element("ID").Value,
                    FirstName = items.Element("FirstName").Value,
                    LastName = items.Element("LastName").Value,
                    Telephone = items.Element("Telephone").Value,
                    Email = items.Element("Email").Value,
                    Room = items.Element("Room").Value,
                    Building = items.Element("Building").Value,
                    Location = items.Element("Location").Value
                })
                .ToList();

PS: you don't need to loop over your result to get a list. You can use ToList()

