Extensions.DescendantNodes<T>(IEnumerable<T>) Yöntem

Tanım

Kaynak koleksiyondaki her belge ve öğenin alt düğümlerinin bir koleksiyonunu döndürür.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;
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)

Tür Parametreleri

T

Uygulamasındaki nesnelerinin türü source , ile sınırlıdır XContainer .The type of the objects in source, constrained to XContainer.

Parametreler

source
IEnumerable<T>

IEnumerable<T> XContainer Kaynak koleksiyonu içeren bir.An IEnumerable<T> of XContainer that contains the source collection.

Döndürülenler

IEnumerable<XNode>

IEnumerable<T> XNode Kaynak koleksiyondaki her belge ve öğenin alt düğümlerinden biri.An IEnumerable<T> of XNode of the descendant nodes of every document and element in the source collection.

Örnekler

Aşağıdaki örnek iki öğe koleksiyonunu alır ve ardından kaynak koleksiyondaki her öğe için tüm alt düğümlerin bir koleksiyonunu alır.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. GrandChildÖğesinin özniteliğinin düğüm olarak sunulmadığını unutmayın.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  

Bu örnek aşağıdaki çıktıyı üretir: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  

Aşağıdakiler aynı örnektir, ancak bu örnekte XML bir ad alanıdır.The following is the same example, but in this case the XML is in a namespace. Daha fazla bilgi için bkz. XML ad alanları Ile çalışma.For more information, see Work 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  

Bu örnek aşağıdaki çıktıyı üretir: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  

Açıklamalar

Bu eksen genişletme yöntemi XDocument ve XElement nesnelerinde kullanılır.This axis extension method is used on XDocument and XElement objects. Bu türlerin her ikisi de türetilir XContainer , bu nedenle bu yöntem IEnumerable<T> XContainer kaynak koleksiyonu içeren bir üzerinde çalışır.Both of these types derive from XContainer, so this method operates on an IEnumerable<T> of XContainer that contains the source collection.

Visual Basic alt öğeler için tümleşik bir XML eksenine sahip olsa da, alt düğümler için tümleşik bir eksen yoktur, bu nedenle Visual Basic kullanıcıların bu eksen yöntemini açıkça kullanması gerekir.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.

Bu yöntem ertelenmiş yürütmeyi kullanır.This method uses deferred execution.

Şunlara uygulanır

Ayrıca bkz.