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

Definitie

Retourneert een verzameling van de onderliggende knooppunten van elk document en element in de bronverzameling.

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)

Type parameters

T

Het type van de objecten in source, beperkt tot XContainer.

Parameters

source
IEnumerable<T>

Een IEnumerable<T> van XContainer die de bronverzameling bevat.

Retouren

Een IEnumerable<T> van XNode de onderliggende knooppunten van elk document en element in de bronverzameling.

Voorbeelden

In het volgende voorbeeld wordt een verzameling van twee elementen opgehaald en vervolgens een verzameling van alle onderliggende knooppunten voor elk element in de bronverzameling opgehaald. Houd er rekening mee dat het kenmerk van het GrandChild element niet wordt weergegeven als een knooppunt.

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

In dit voorbeeld wordt de volgende uitvoer gegenereerd:

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

Hier volgt hetzelfde voorbeeld, maar in dit geval bevindt de XML zich in een naamruimte. Zie Werken met XML-naamruimten voor meer informatie.

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

In dit voorbeeld wordt de volgende uitvoer gegenereerd:

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

Opmerkingen

Deze asextensiemethode wordt gebruikt voor XDocument en XElement objecten. Beide typen zijn afgeleid van XContainer, dus deze methode werkt op een IEnumerable<T> van XContainer die de bronverzameling bevat.

Hoewel Visual Basic een geïntegreerde XML-as heeft voor onderliggende elementen, is er geen geïntegreerde as voor onderliggende knooppunten, dus Visual Basic gebruikers deze asmethode expliciet moeten gebruiken.

Deze methode maakt gebruik van de uitgestelde uitvoering.

Van toepassing op

Zie ook