linq
  1. linq-querying-xml-data

Querying XML Data with LINQ to XML

LINQ to XML is a powerful tool for querying and manipulating XML files in .NET applications. It provides an intuitive and easy-to-use API for searching and selecting nodes in an XML document. In this tutorial, we'll learn how to query XML data with LINQ to XML.

Syntax

XDocument xmlDoc = XDocument.Load("path/to/xml");
var queryResult = from element in xmlDoc.Descendants("elementName")
                  where (element.Attribute("attributeName").Value == "attributeValue")
                  select element;

Example

Let's say we have an XML file named books.xml with the following contents:

<?xml version="1.0" encoding="UTF-8"?>
<books>
  <book id="001">
    <title>Code Complete</title>
    <author>Steve McConnell</author>
    <publisher>Microsoft Press</publisher>
    <year>1993</year>
  </book>
  <book id="002">
    <title>The Pragmatic Programmer</title>
    <author>Andrew Hunt and David Thomas</author>
    <publisher>Pragmatic Bookshelf</publisher>
    <year>1999</year>
  </book>
  <book id="003">
    <title>Design Patterns</title>
    <author>Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides</author>
    <publisher>Addison-Wesley</publisher>
    <year>1994</year>
  </book>
</books>

We can use LINQ to XML to query for all the books published by Addison-Wesley:

XDocument xmlDoc = XDocument.Load("books.xml");
var queryResult = from book in xmlDoc.Descendants("book")
                  where (string)book.Element("publisher") == "Addison-Wesley"
                  select book;

The Descendants() method generates all elements in the XML file that matches the name provided. In this example, it fetches all book elements from the XML file. Then we are using where clause to filter the books published by Addison-Wesley, and finally, we are projecting the queried books using the select statement.

Output

The output of the above query will be an IEnumerable<XElement> object containing all the queried book elements in the XML file.

Explanation

In the example above, we first load the XML file using the XDocument.Load() method. Then, we use a LINQ query to select all the book elements whose publisher element has a value of "Addison-Wesley". The string casting for publisher element is necessary because the Element() method returns an XElement object, which must be explicitly cast to a string to compare it to another string value.

Use

LINQ to XML can be used to query any XML file in a .NET application. It is especially useful when the XML file is too large to be stored in memory, as it can be read and queried in a stream-like manner.

Important Points

  • The XDocument class is used to represent an XML file.
  • The Descendants() method returns all the elements in the XML file that match the specified name.
  • The Element() method returns the child element with the specified name.

Summary

In this tutorial, we've learned how to query XML data using LINQ to XML in a .NET application. We've seen how to use the Descendants() method to fetch all elements of a particular type from an XML file and how to use where clause to filter the results based on specific criteria. We've also learned how to use the Element() method to fetch the values of child elements.

Published on: