Extensions.Elements<T> Method (IEnumerable<T>, XName)
[ This article is for Windows Phone 8 developers. If you’re developing for Windows 10, see the latest documentation. ]
Returns a filtered collection of the child elements of every element and document in the source collection. Only elements that have a matching XName are included in the collection.
Assembly: System.Xml.Linq (in System.Xml.Linq.dll)
public static IEnumerable<XElement> Elements<T>( this IEnumerable<T> source, XName name ) where T : XContainer
Type Parameters
- T
The type of the objects in source, constrained to XContainer.
Parameters
- source
- Type: System.Collections.Generic.IEnumerable<T>
An IEnumerable<T> of XElement that contains the source collection.
- name
- Type: System.Xml.Linq.XName
The XName to match.
Return Value
Type: System.Collections.Generic.IEnumerable<XElement>An IEnumerable<T> of XElement of the child elements of every element and document in the source collection. Only elements that have a matching XName are included in the collection.
Usage Note
In Visual Basic and C#, you can call this method as an instance method on any object of type IEnumerable<T>. When you use instance method syntax to call this method, omit the first parameter.| Exception | Condition |
|---|---|
| ArgumentNullException | source is null. |
This extension method is useful when you want to retrieve all elements with a specified name at a particular depth. This is easy if the document is very regular, but if the document is irregular, it can be a bit more difficult. In the following example, we want to retrieve all aaa elements that are children of Item elements. A given Item element may or may not contain an aaa element. This is easily accomplished using this extension method, as follows:
StringBuilder output = new StringBuilder(); XElement xmlTree = new XElement("Root", new XElement("Item", new XElement("aaa", 1), new XElement("bbb", 2) ), new XElement("Item", new XElement("ccc", 3), new XElement("aaa", 4) ), new XElement("Item", new XElement("ddd", 5), new XElement("eee", 6) ) ); IEnumerable<XElement> allGrandChildren = from el in xmlTree.Elements("Item").Elements("aaa") select el; foreach (XElement el in allGrandChildren) output.Append(el + Environment.NewLine); OutputTextBlock.Text = output.ToString();