Share via

Facebook x.com LinkedIn Email

Extensions.DescendantNodes<T> Method

Microsoft Silverlight will reach end of support after October 2021. Learn more.

Returns a collection of the descendant nodes of every document and element in the source collection.

Namespace: System.Xml.Linq
Assembly: System.Xml.Linq (in System.Xml.Linq.dll)

Syntax

'Declaration
<ExtensionAttribute> _
Public Shared Function DescendantNodes(Of T As XContainer) ( _
 source As IEnumerable(Of T) _
) As IEnumerable(Of XNode)
public static IEnumerable<XNode> DescendantNodes<T>(
 this IEnumerable<T> source
)
where T : XContainer

Type Parameters

  • T
    The type of the objects in source, constrained to XContainer.

Parameters

Return Value

Type: System.Collections.Generic.IEnumerable<XNode>
An IEnumerable<T> of XNode of the descendant nodes of every document and element 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.

Exceptions

Exception Condition
ArgumentNullException

source is nulla null reference (Nothing in Visual Basic).

Remarks

This axis extension method is used on XDocument and XElement objects. Both of these types derive from XContainer, so this method operates on an IEnumerable<T> of XContainer that contains the source collection.

Although Visual Basic has an integrated XML axis for descendant elements, there is no integrated axis for descendant nodes, so Visual Basic users must use this axis method explicitly.

This method uses deferred execution.

Examples

The following example retrieves a collection of two elements, and then retrieves a collection of all descendant nodes for every element in the source collection. Note that the attribute of the GrandChild element is not surfaced as a node.

Dim output As New StringBuilder
Dim xmlTree As XElement = _
<Root>
 <Child>aaa<GrandChild anAttribute='xyz'>Text</GrandChild>
 <!--a comment-->
 <?xml-stylesheet type='text/xsl' href='test.xsl'?>
 </Child>
 <Child>ccc<GrandChild>Text</GrandChild>ddd</Child>
</Root>
Dim nodes As IEnumerable(Of XNode) = _
 From node In xmlTree.<Child>.DescendantNodes _
 Select node
For Each node As XNode In nodes
 Select Case node.NodeType
 Case XmlNodeType.Element
 output.Append(String.Format("Element: {0}", DirectCast(node, XElement).Name))
 output.Append(Environment.NewLine)
 Case XmlNodeType.Text
 output.Append(String.Format("Text: {0}", DirectCast(node, XText).Value))
 output.Append(Environment.NewLine)
 Case XmlNodeType.Comment
 output.Append(String.Format("Comment: {0}", DirectCast(node, XComment).Value))
 output.Append(Environment.NewLine)
 Case XmlNodeType.ProcessingInstruction
 output.Append(String.Format("PI: {0}", DirectCast(node, XProcessingInstruction).Data))
 output.Append(Environment.NewLine)
 End Select
Next
OutputTextBlock.Text = output.ToString()
 StringBuilder output = new StringBuilder();
 XElement xmlTree = XElement.Parse(
 @"<Root>
 <Child>aaa<GrandChild anAttribute='xyz'>Text</GrandChild>
 <!--a comment-->
 <?xml-stylesheet type='text/xsl' href='test.xsl'?>
 </Child>
 <Child>ccc<GrandChild>Text</GrandChild>ddd</Child>
</Root>");
 IEnumerable<XNode> nodes =
 from node in xmlTree.Elements("Child").DescendantNodes()
 select node;
 foreach (XNode node in nodes)
 {
 switch (node.NodeType)
 {
 case XmlNodeType.Element:
 output.Append("Element: " + ((XElement)node).Name + Environment.NewLine);
 break;
 case XmlNodeType.Text:
 output.Append("Text: " + ((XText)node).Value + Environment.NewLine);
 break;
 case XmlNodeType.Comment:
 output.Append("Comment: " + ((XComment)node).Value + Environment.NewLine);
 break;
 case XmlNodeType.ProcessingInstruction:
 output.Append("PI: " + ((XProcessingInstruction)node).Data + Environment.NewLine);
 break;
 }
 }
 OutputTextBlock.Text = output.ToString();

Version Information

Silverlight

Supported in: 5, 4, 3

Silverlight for Windows Phone

Supported in: Windows Phone OS 7.1, Windows Phone OS 7.0

XNA Framework

Supported in: Xbox 360, Windows Phone OS 7.0

Platforms

For a list of the operating systems and browsers that are supported by Silverlight, see Supported Operating Systems and Browsers.


  • Last updated on 2011年11月17日