Extensions.DescendantNodes<T>(IEnumerable<T>) メソッド

定義

ソース コレクション内のすべてのドキュメントおよび要素の子孫ノードのコレクションを返します。

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

XContainer に制限された、source 内のオブジェクトの型。

パラメーター

source
IEnumerable<T>

ソース コレクションが格納されている IEnumerable<T>XContainer

戻り値

ソース コレクション内のすべてのドキュメントおよび要素の子孫ノードの、IEnumerable<T>XNode

次の例では、2 つの要素のコレクションを取得し、ソース コレクション内のすべての要素のすべての子孫ノードのコレクションを取得します。 要素の GrandChild 属性はノードとして表示されないことに注意してください。

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  

この例を実行すると、次の出力が生成されます。

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

同じ例を次に示しますが、この場合、XML は名前空間にあります。 詳細については、「 XML 名前空間の操作」を参照してください。

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  

この例を実行すると、次の出力が生成されます。

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  

注釈

この軸拡張メソッドは、 オブジェクトと XElement オブジェクトでXDocument使用されます。 これらの型はどちらも からXContainer派生するため、このメソッドはソース コレクションを含む の XContainer に対IEnumerable<T>して動作します。

Visual Basic には子孫要素用の統合 XML 軸がありますが、子孫ノードの統合軸がないため、Visual Basic ユーザーはこの軸メソッドを明示的に使用する必要があります。

このメソッドは遅延実行を使用します。

適用対象

こちらもご覧ください