Extensions.DescendantNodes<T>(IEnumerable<T>) Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Gibt eine Auflistung der Nachfolgerknoten jedes Dokuments und Elements in der Quellauflistung zurück.
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)
Typparameter
- T
Der Typ der Objekte in source
, auf XContainer beschränkt.
Parameter
- source
- IEnumerable<T>
Ein IEnumerable<T> vom Typ XContainer, das die Quellauflistung enthält.
Gibt zurück
Ein IEnumerable<T> vom Typ XNode der Nachfolgerknoten jedes Dokuments und Elements in der Quellauflistung.
Beispiele
Im folgenden Beispiel wird eine Auflistung von zwei Elementen abgerufen und dann eine Auflistung aller untergeordneten Knoten für jedes Element in der Quellauflistung abgerufen. Beachten Sie, dass das Attribut des GrandChild
Elements nicht als Knoten angezeigt wird.
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
Dieses Beispiel erzeugt die folgende Ausgabe:
Text: aaa
Element: GrandChild
Text: Text
Comment: a comment
PI: type='text/xsl' href='test.xsl'
Text: ccc
Element: GrandChild
Text: Text
Text: ddd
Im Folgenden sehen Sie das gleiche Beispiel, aber in diesem Fall befindet sich die XML in einem Namespace. Weitere Informationen finden Sie unter Arbeiten mit 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
Dieses Beispiel erzeugt die folgende Ausgabe:
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
Hinweise
Diese Achsenerweiterungsmethode wird für XDocument - und XElement -Objekte verwendet. Beide Typen leiten sich von ab XContainer, sodass diese Methode mit einer IEnumerable<T> von XContainer arbeitet, die die Quellauflistung enthält.
Obwohl Visual Basic über eine integrierte XML-Achse für untergeordnete Elemente verfügt, gibt es keine integrierte Achse für absteigende Knoten, sodass Visual Basic-Benutzer diese Achsenmethode explizit verwenden müssen.
Diese Methode verwendet verzögerte Ausführung.