XML C# Tutorial

using System;
using System.Collections.Generic;
using System.IO;
using System.Xml;
using System.Xml.XPath;
    public class Customer
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string EmailAddress { get; set; }
        public override string ToString()
        {
            return string.Format("{0} {1}\nEmail:   {2}",FirstName, LastName, EmailAddress);
        }
    }
    public class Tester
    {
        static void Main()
        {
            List customers = new List{
                new Customer { FirstName = "A", 
                               LastName = "G",
                               EmailAddress = "o@a.com"},
                new Customer { FirstName = "B", 
                               LastName = "C",
                               EmailAddress = "k@a.com" },
                new Customer { FirstName = "D", 
                               LastName = "C",
                               EmailAddress = "d@a.com" },
                new Customer { FirstName = "E", 
                               LastName = "G",
                               EmailAddress = "j@a.com" },
                new Customer { FirstName = "L", 
                               LastName = "H",
                               EmailAddress = "l@a.com" }
            };
            XmlDocument customerXml = new XmlDocument();
            XmlElement rootElem = customerXml.CreateElement("Customers");
            customerXml.AppendChild(rootElem);
            foreach (Customer customer in customers)
            {
                XmlElement customerElem = customerXml.CreateElement("Customer");
                XmlAttribute firstNameAttr = customerXml.CreateAttribute("FirstName");
                firstNameAttr.Value = customer.FirstName;
                customerElem.Attributes.Append(firstNameAttr);
                XmlAttribute lastNameAttr = customerXml.CreateAttribute("LastName");
                lastNameAttr.Value = customer.LastName;
                customerElem.Attributes.Append(lastNameAttr);
                XmlElement emailAddress = customerXml.CreateElement("EmailAddress");
                emailAddress.InnerText = customer.EmailAddress;
                customerElem.AppendChild(emailAddress);
                rootElem.AppendChild(customerElem);
            }
            XPathNavigator nav = customerXml.CreateNavigator();
            string xPath = "descendant::Customer[starts-with(@LastName, 'G') and contains(EmailAddress, 'a.com')]";
            XPathNodeIterator iter = nav.Select(xPath);
            XPathExpression expr2 = nav.Compile(xPath);
            expr2.AddSort("@FirstName", XmlSortOrder.Ascending, XmlCaseOrder.None, string.Empty, XmlDataType.Text);
            iter = nav.Select(expr2);
            while (iter.MoveNext())
                Console.WriteLine(iter.Current.OuterXml);
                
        }
    }