C# – LINQ to read XML
LINQ to read XML
Loading the XML File
XElement and XDocument derive from XContainer.
1. XElement class
Reads the XML elements (attributes and children)
Implements IXmlSerializable.
XElement xelement = XElement.Load(file); IEnumerableemployees = xelement.Elements(); //Read the entire XML foreach(var employee in employees) { Console.WriteLine("Reading Employee: == " + employee); }
2. XDocument class
Reads the entire XMl document.
Reads from the single root element.
XDocument xdocument = XDocument.Load(file); IEnumerableemployees = xdocument.Elements(); foreach(var employee in employees) { Console.WriteLine("Reading Employee: == " + employee); }
Reading the Single Element
foreach(var employee in employees) { Console.WriteLine("Reading Employee: == " + employee.Element("Name").Value); }
Reading Multiple Elements
foreach(var employee in employees) { Console.WriteLine("Reading Employee: {0} == {1}", employee.Element("Name").Value, employee.Element("EmpId").Value); }
Filter Elements
XElement xelement = XElement.Load(file); var name = from nm in xelement.Elements("Employee") where (string)nm.Element("Sex") == "Female" select nm; Console.WriteLine("Information about Female Employees"); foreach(XElement x in name) { Console.WriteLine(x); }
Filter Element within another Element
XElement xelement = XElement.Load(file); var addresses = from address in xelement.Elements("Employee") where (string)address.Element("Address").Element("City") == "Alta" select address; Console.WriteLine("Information about Employees in Alta City"); foreach(XElement x in addresses) { Console.WriteLine(x); }
Find Nested Elements using Descendants
XElement xelement = XElement.Load(file); Console.WriteLine("List of all Zip codes"); foreach(XElement x in xelement.Descendants("Zip")) { Console.WriteLine((string)x); }
Sorting Elements
XElement xelement = XElement.Load(file); IEnumerablecodes = from code in xelement.Elements("Employee") let zip = (string)code.Element("Address").Element("Zip") orderby zip select zip; Console.WriteLine("List and Sort all Zip Codes"); foreach (string zp in codes) Console.WriteLine(zp);