Extensions.Descendants<T> Method (IEnumerable<T>, XName)
Returns a filtered collection of elements that contains the descendant 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> Descendants<T>( this IEnumerable<T> source, XName name ) where T : XContainer
Parameters
- source
-
Type:
System.Collections.Generic.IEnumerable<T>
An IEnumerable<T> of XContainer 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 that contains the descendant elements of every element and document in the source collection. Only elements that have a matching XName are included in the collection.
Type Parameters
- T
The type of the objects in source, constrained to XContainer.
Visual Basic users can use the Language-Integrated Axes in Visual Basic (LINQ to XML)2 instead of using this axis method explicitly.
This method uses deferred execution.
The following example retrieves a collection of two elements, and then retrieves a collection of all descendants of the two elements that have the specified element name.
XElement xmlTree = XElement.Parse(
@"<Root>
<Para>
<t>This is some text </t>
<b>
<t>where</t>
</b>
<t> all of the text nodes must be concatenated. </t>
</Para>
<Para>
<t>This is a second sentence.</t>
</Para>
</Root>");
string str =
(from el in xmlTree.Elements("Para").Descendants("t")
select (string)el)
.Aggregate(new StringBuilder(),
(sb, i) => sb.Append(i),
sb => sb.ToString());
Console.WriteLine(str);
This example produces the following output:
This is some text where all of the text nodes must be concatenated. This is a second sentence.
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 text nodes must be concatenated. </t>
</Para>
<Para>
<t>This is a second sentence.</t>
</Para>
</Root>");
string str =
(from el in xmlTree.Elements(aw + "Para").Descendants(aw + "t")
select (string)el)
.Aggregate(new StringBuilder(),
(sb, i) => sb.Append(i),
sb => sb.ToString());
Console.WriteLine(str);
This example produces the following output:
This is some text where all of the text nodes must be concatenated. This is a second sentence.
Available since 8
.NET Framework
Available since 3.5
Portable Class Library
Supported in: portable .NET platforms
Silverlight
Available since 2.0
Windows Phone Silverlight
Available since 7.0
Windows Phone
Available since 8.1