Mega Code Archive

 
Categories / C# Tutorial / XML
 

Sorting XPathExpression with XmlSortOrder Ascending, XmlCaseOrder None

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<Customer> customers = new List<Customer>{                 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);                          }     }