Extensions.Descendants<T> Method (IEnumerable<T>)
Returns a collection of elements that contains the descendant elements of every element and document in the source collection.
Namespace: System.Xml.Linq
Assembly: System.Xml.Linq (in System.Xml.Linq.dll)
public static IEnumerable<XElement> Descendants<T>( this IEnumerable<T> source ) 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 XContainer that contains the source collection.
Return Value
Type: System.Collections.Generic.IEnumerable<XElement>An IEnumerable<T> of XElement that contains the descendant elements of every element and document in the source 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. For more information, see Extension Methods (Visual Basic) or Extension Methods (C# Programming Guide).Visual Basic users can use the integrated XML descendant axis to retrieve the descendant elements of a collection. However, the integrated axis only retrieves descendants with a specified name. If Visual Basic users want to retrieve all descendants, then they must use this axis method explicitly.
This method uses deferred execution.
The following example retrieves a collection of elements, and then uses this axis method to retrieve all descendent elements of every item in the collection of elements.
XElement xmlTree = XElement.Parse( @"<Root> <Para> <t>This is some text </t> <b> <t>where</t> </b> <t> all of the nodes must be concatenated. </t> </Para> <Para> <t>This is a second sentence.</t> </Para> </Root>"); IEnumerable<XElement> elList = from el in xmlTree.Elements("Para").Descendants() select el; foreach (XElement el in elList) Console.WriteLine(el);
This example produces the following output:
<t>This is some text </t> <b> <t>where</t> </b> <t>where</t> <t> all of the nodes must be concatenated. </t> <t>This is a second sentence.</t>
The following is the same example, but in this case the XML is in a namespace. For more information, see Working with XML Namespaces.
XNamespace aw = "http://www.adventure-works.com"; XElement xmlTree = XElement.Parse( @"<Root xmlns='http://www.adventure-works.com'> <Para> <t>This is some text </t> <b> <t>where</t> </b> <t> all of the nodes must be concatenated. </t> </Para> <Para> <t>This is a second sentence.</t> </Para> </Root>"); IEnumerable<XElement> elList = from el in xmlTree.Elements(aw + "Para").Descendants() select el; foreach (XElement el in elList) Console.WriteLine(el);
This example produces the following output:
<t xmlns="http://www.adventure-works.com">This is some text </t> <b xmlns="http://www.adventure-works.com"> <t>where</t> </b> <t xmlns="http://www.adventure-works.com">where</t> <t xmlns="http://www.adventure-works.com"> all of the nodes must be concatenated. </t> <t xmlns="http://www.adventure-works.com">This is a second sentence.</t>
Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.