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

Tanım

Kaynak koleksiyondaki her belge ve öğenin alt düğümlerinden oluşan bir koleksiyon döndürür.

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

içindeki sourcenesnelerinin türü ile kısıtlanmış XContainer.

Parametreler

source
IEnumerable<T>

IEnumerable<T> Kaynak XContainer koleksiyonu içeren bir öğe.

Döndürülenler

IEnumerable<T> XNode Kaynak koleksiyondaki her belgenin ve öğenin alt düğümlerinden biri.

Örnekler

Aşağıdaki örnek, iki öğeden oluşan bir koleksiyon alır ve ardından kaynak koleksiyondaki her öğe için tüm alt düğümlerden oluşan bir koleksiyon alır. öğesinin özniteliğinin GrandChild düğüm olarak gösterilmediğini unutmayın.

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 çıkışı oluşturur:

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ğıda aynı örnek verilmiştir, ancak bu örnekte XML bir ad alanındadır. Daha fazla bilgi için bkz. XML Ad Alanları ile çalışma.

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 çıkışı oluşturur:

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 uzantısı yöntemi ve XDocument nesnelerinde XElement kullanılır. Bu türlerin her ikisi de türünden XContainertüretilir, bu nedenle bu yöntem kaynak koleksiyonu içeren bir IEnumerable<T>XContainer yöntemi üzerinde çalışır.

Visual Basic alt öğeler için tümleşik bir XML ekseni olsa da, alt düğümler için tümleşik eksen yoktur, bu nedenle Visual Basic kullanıcıların bu eksen yöntemini açıkça kullanması gerekir.

Bu yöntem ertelenen yürütmeyi kullanır.

Şunlara uygulanır

Ayrıca bkz.