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