LINQ to XML axes overview

After you've created an XML tree or loaded an XML document into an XML tree, you can query it to find elements and attributes and retrieve their values. You retrieve collections through the axis methods, also called axes. Some of the axes are methods in the XElement and XDocument classes that return IEnumerable<T> collections. Some of the axes are extension methods in the Extensions class. The axes that are implemented as extension methods operate on collections and return collections.

As described in XElement class overview, an XElement object represents a single element node. The content of an element can be complex (sometimes called structured content), or it can be a simple element. A simple element can be empty or can contain a value. If the node contains structured content, you can use the various axis methods to retrieve enumerations of descendant elements. The most commonly used axis methods are Elements and Descendants.

In addition to the axis methods, which return collections, there are two more methods that you'll commonly use in LINQ to XML queries. The Element method returns a single XElement. The Attribute method returns a single XAttribute.

For many purposes, LINQ queries provide the most powerful way to examine a tree, extract data from it, and transform it. LINQ queries operate on objects that implement IEnumerable<T>, and the LINQ to XML axes return IEnumerable<T> of XElement collections, and IEnumerable<T> of XAttribute collections. You need these collections to do your queries.

In addition to the axis methods that retrieve collections of elements and attributes, there are axis methods that allow you to iterate through the tree in great detail. For example, instead of dealing with elements and attributes, you can work with the nodes of the tree. Nodes are a finer level of granularity than elements and attributes. When working with nodes, you can examine XML comments, text nodes, processing instructions, and more. This functionality is important, for example, to someone who is writing a word processor and wants to save documents as XML. However, the majority of XML programmers are primarily concerned with elements, attributes, and their values.

Methods for retrieving a collection of elements

The following is a summary of the methods of the XElement class (or its base classes) that you call on an XElement to return a collection of elements.

Method Description
XNode.Ancestors Returns an IEnumerable<T> of XElement of the ancestors of this element. An overload returns an IEnumerable<T> of XElement of the ancestors that have the specified XName.
XContainer.Descendants Returns an IEnumerable<T> of XElement of the descendants of this element. An overload returns an IEnumerable<T> of XElement of the descendants that have the specified XName.
XContainer.Elements Returns an IEnumerable<T> of XElement of the child elements of this element. An overload returns an IEnumerable<T> of XElement of the child elements that have the specified XName.
XNode.ElementsAfterSelf Returns an IEnumerable<T> of XElement of the elements that come after this element. An overload returns an IEnumerable<T> of XElement of the elements after this element that have the specified XName.
XNode.ElementsBeforeSelf Returns an IEnumerable<T> of XElement of the elements that come before this element. An overload returns an IEnumerable<T> of XElement of the elements before this element that have the specified XName.
XElement.AncestorsAndSelf Returns an IEnumerable<T> of XElement of this element and its ancestors. An overload returns an IEnumerable<T> of XElement of the elements that have the specified XName.
XElement.DescendantsAndSelf Returns an IEnumerable<T> of XElement of this element and its descendants. An overload returns an IEnumerable<T> of XElement of the elements that have the specified XName.

Method for retrieving a single element

The following method retrieves a single child from an XElement object.

Method Description
XContainer.Element Returns the first child XElement object that has the specified XName.

Method for retrieving a collection of attributes

The following method retrieves attributes from an XElement object.

Method Description
XElement.Attributes Returns an IEnumerable<T> of XAttribute of all of the attributes.

Method for retrieving a single attribute

The following method retrieves a single attribute from an XElement object.

Method Description
XElement.Attribute Returns the XAttribute that has the specified XName.