Extensions.DescendantNodes(IEnumerable<T>) Extensions.DescendantNodes(IEnumerable<T>) Extensions.DescendantNodes(IEnumerable<T>) Extensions.DescendantNodes(IEnumerable<T>) Method

Definición

Devuelve una colección de los nodos descendientes de todos los documentos y elementos de la colección de origen.Returns a collection of the descendant nodes of every document and element in the source collection.

public:
generic <typename T>
 where T : System::Xml::Linq::XContainer[System::Runtime::CompilerServices::Extension]
 static System::Collections::Generic::IEnumerable<System::Xml::Linq::XNode ^> ^ DescendantNodes(System::Collections::Generic::IEnumerable<T> ^ source);
public static System.Collections.Generic.IEnumerable<System.Xml.Linq.XNode> DescendantNodes<T> (this System.Collections.Generic.IEnumerable<T> source) where T : System.Xml.Linq.XContainer;
static member DescendantNodes : seq<'T (requires 'T :> System.Xml.Linq.XContainer)> -> seq<System.Xml.Linq.XNode> (requires 'T :> System.Xml.Linq.XContainer)
<Extension()>
Public Function DescendantNodes(Of T As XContainer) (source As IEnumerable(Of T)) As IEnumerable(Of XNode)

Parámetros de tipo

T

Tipo de los objetos de source, restringido a XContainer.The type of the objects in source, constrained to XContainer.

Parámetros

source
IEnumerable<T> IEnumerable<T> IEnumerable<T> IEnumerable<T>

Interfaz IEnumerable<T> de XContainer que contiene la colección de origen.An IEnumerable<T> of XContainer that contains the source collection.

Devoluciones

Interfaz IEnumerable<T> de XNode de los nodos descendientes de todos los documentos y elementos de la colección de origen.An IEnumerable<T> of XNode of the descendant nodes of every document and element in the source collection.

Ejemplos

En el ejemplo siguiente se recupera una colección de dos elementos y, a continuación, se recupera una colección de todos los nodos descendientes de todos los elementos de la colección de origen.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. Tenga en cuenta que el atributo GrandChild del elemento no se encuentra en un nodo.Note that the attribute of the GrandChild element is not surfaced as a node.

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:  
            Console.WriteLine("Element: {0}", ((XElement)node).Name);  
            break;  
        case XmlNodeType.Text:  
            Console.WriteLine("Text: {0}", ((XText)node).Value);  
            break;  
        case XmlNodeType.Comment:  
            Console.WriteLine("Comment: {0}", ((XComment)node).Value);  
            break;  
        case XmlNodeType.ProcessingInstruction:  
            Console.WriteLine("PI: {0}", ((XProcessingInstruction)node).Data);  
            break;  
    }  
}  
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  
            Console.WriteLine("Element: {0}", DirectCast(node, XElement).Name)  
        Case XmlNodeType.Text  
            Console.WriteLine("Text: {0}", DirectCast(node, XText).Value)  
        Case XmlNodeType.Comment  
            Console.WriteLine("Comment: {0}", DirectCast(node, XComment).Value)  
        Case XmlNodeType.ProcessingInstruction  
            Console.WriteLine("PI: {0}", DirectCast(node, XProcessingInstruction).Data)  
    End Select  
Next  

Este ejemplo produce el siguiente resultado:This example produces the following output:

Text: aaa  
Element: GrandChild  
Text: Text  
Comment: a comment  
PI: type='text/xsl' href='test.xsl'  
Text: ccc  
Element: GrandChild  
Text: Text  
Text: ddd  

El siguiente ejemplo es el mismo, pero en este caso el XML está en un espacio de nombres.The following is the same example, but in this case the XML is in a namespace. Para obtener más información, vea trabajar con espacios de nombres XML.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'>  
    <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(aw + "Child").DescendantNodes()  
    select node;  
  
foreach (XNode node in nodes)  
{  
    switch (node.NodeType)  
    {  
        case XmlNodeType.Element:  
            Console.WriteLine("Element: {0}", ((XElement)node).Name);  
            break;  
        case XmlNodeType.Text:  
            Console.WriteLine("Text: {0}", ((XText)node).Value);  
            break;  
        case XmlNodeType.Comment:  
            Console.WriteLine("Comment: {0}", ((XComment)node).Value);  
            break;  
        case XmlNodeType.ProcessingInstruction:  
            Console.WriteLine("PI: {0}", ((XProcessingInstruction)node).Data);  
            break;  
    }  
}  
Imports <xmlns="http://www.adventure-works.com">  
  
Module Module1  
    Sub Main()  
        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  
                    Console.WriteLine("Element: {0}", DirectCast(node, XElement).Name)  
                Case XmlNodeType.Text  
                    Console.WriteLine("Text: {0}", DirectCast(node, XText).Value)  
                Case XmlNodeType.Comment  
                    Console.WriteLine("Comment: {0}", DirectCast(node, XComment).Value)  
                Case XmlNodeType.ProcessingInstruction  
                    Console.WriteLine("PI: {0}", DirectCast(node, XProcessingInstruction).Data)  
            End Select  
        Next  
    End Sub  
End Module  

Este ejemplo produce el siguiente resultado:This example produces the following output:

Text: aaa  
Element: {http://www.adventure-works.com}GrandChild  
Text: Text  
Comment: a comment  
PI: type='text/xsl' href='test.xsl'  
Text: ccc  
Element: {http://www.adventure-works.com}GrandChild  
Text: Text  
Text: ddd  

Comentarios

Este método de extensión de eje se XDocument usa XElement en los objetos y.This axis extension method is used on XDocument and XElement objects. Ambos tipos derivan de XContainer, por lo que este método funciona en un XContainer IEnumerable<T> de que contiene la colección de origen.Both of these types derive from XContainer, so this method operates on an IEnumerable<T> of XContainer that contains the source collection.

Aunque Visual Basic tiene un eje XML integrado para los elementos descendientes, no hay ningún eje integrado para los nodos descendientes, por lo que Visual Basic usuarios deben utilizar este método de eje explícitamente.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.

Este método usa la ejecución diferida.This method uses deferred execution.

Se aplica a

Consulte también: