Extensions.Ancestors Methode

Definition

Gibt eine Auflistung von Elementen zurück, die die übergeordneten Elemente der einzelnen Knoten in der Quellauflistung enthält.

Überlädt

Ancestors<T>(IEnumerable<T>)

Gibt eine Auflistung von Elementen zurück, die die übergeordneten Elemente der einzelnen Knoten in der Quellauflistung enthält.

Ancestors<T>(IEnumerable<T>, XName)

Gibt eine gefilterte Auflistung von Elementen zurück, die die übergeordneten Elemente der einzelnen Knoten in der Quellauflistung enthält. Nur Elemente, die über einen übereinstimmenden XName verfügen, sind in der Auflistung enthalten.

Hinweise

Wenn mehrere Knoten in der Quellsammlung denselben Vorgänger aufweisen, wird der Vorgänger mehrmals in die Ergebnissammlung einbezogen. Um dies zu vermeiden, verwenden Sie die Distinct Methode.

Diese Methode verwendet verzögerte Ausführung.

Ancestors<T>(IEnumerable<T>)

Gibt eine Auflistung von Elementen zurück, die die übergeordneten Elemente der einzelnen Knoten in der Quellauflistung enthält.

public:
generic <typename T>
 where T : System::Xml::Linq::XNode[System::Runtime::CompilerServices::Extension]
 static System::Collections::Generic::IEnumerable<System::Xml::Linq::XElement ^> ^ Ancestors(System::Collections::Generic::IEnumerable<T> ^ source);
public static System.Collections.Generic.IEnumerable<System.Xml.Linq.XElement> Ancestors<T> (this System.Collections.Generic.IEnumerable<T> source) where T : System.Xml.Linq.XNode;
public static System.Collections.Generic.IEnumerable<System.Xml.Linq.XElement> Ancestors<T> (this System.Collections.Generic.IEnumerable<T?> source) where T : System.Xml.Linq.XNode;
static member Ancestors : seq<'T (requires 'T :> System.Xml.Linq.XNode)> -> seq<System.Xml.Linq.XElement> (requires 'T :> System.Xml.Linq.XNode)
<Extension()>
Public Function Ancestors(Of T As XNode) (source As IEnumerable(Of T)) As IEnumerable(Of XElement)

Typparameter

T

Der Typ der Objekte in source, auf XNode beschränkt.

Parameter

source
IEnumerable<T>

Ein IEnumerable<T> vom Typ XNode, das die Quellauflistung enthält.

Gibt zurück

IEnumerable<XElement>

Ein IEnumerable<T> vom Typ XElement, das die übergeordneten Elemente der einzelnen Knoten in der Quellauflistung enthält.

Beispiele

Im folgenden Beispiel wird eine Sammlung der Großen Enkelelemente abgerufen. Anschließend wird diese Achsenmethode verwendet, um alle Vorgänger aller Elemente in der Auflistung abzurufen.

XElement xmlTree = new XElement("Root",  
    new XElement("Child1",  
        new XElement("GrandChild1",  
            new XElement("GreatGrandChild1", "content")  
        )  
    ),  
    new XElement("Child2",  
        new XElement("GrandChild2",  
            new XElement("GreatGrandChild2", "content")  
        )  
    )  
);  
IEnumerable<XElement> greatGrandChildren =  
    from el in xmlTree.Descendants()  
    where el.Name.LocalName.StartsWith("Great")  
    select el;  

Console.WriteLine("Great Grand Children Elements");  
Console.WriteLine("----");  
foreach (XElement de in greatGrandChildren)  
    Console.WriteLine(de.Name);  

IEnumerable<XElement> allAncestors =  
    from el in greatGrandChildren.Ancestors().Distinct()  
    select el;  

Console.WriteLine("");  
Console.WriteLine("Ancestors");  
Console.WriteLine("----");  
foreach (XElement de in allAncestors)  
    Console.WriteLine(de.Name);  
Dim xmlTree As XElement = _  
    <Root>  
        <Child1>  
            <GrandChild1>  
                <GreatGrandChild1>content</GreatGrandChild1>  
            </GrandChild1>  
        </Child1>  
        <Child2>  
            <GrandChild2>  
                <GreatGrandChild2>content</GreatGrandChild2>  
            </GrandChild2>  
        </Child2>  
    </Root>  

Dim greatGrandChildren = From el In xmlTree.Descendants _  
                         Where el.Name.LocalName.StartsWith("Great") _  
                         Select el  

Console.WriteLine("Great Grand Children Elements")  
Console.WriteLine("----")  

For Each de As XElement In greatGrandChildren  
    Console.WriteLine(de.Name)  
Next  

Dim allAncestors = From el In greatGrandChildren.Ancestors.Distinct _  
                   Select el  

Console.WriteLine("")  
Console.WriteLine("Ancestors")  
Console.WriteLine("----")  

For Each de As XElement In allAncestors  
    Console.WriteLine(de.Name)  
Next  

Dieses Beispiel erzeugt die folgende Ausgabe:

Great Grand Children Elements  
----  
GreatGrandChild1  
GreatGrandChild2  

Ancestors  
----  
GrandChild1  
Child1  
Root  
GrandChild2  
Child2  

Das folgende Beispiel ist 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 = new XElement(aw + "Root",  
    new XElement(aw + "Child1",  
        new XElement(aw + "GrandChild1",  
            new XElement(aw + "GreatGrandChild1", "content")  
        )  
    ),  
    new XElement(aw + "Child2",  
        new XElement(aw + "GrandChild2",  
            new XElement(aw + "GreatGrandChild2", "content")  
        )  
    )  
);  
IEnumerable<XElement> greatGrandChildren =  
    from el in xmlTree.Descendants()  
    where el.Name.LocalName.StartsWith("Great")  
    select el;  

Console.WriteLine("Great Grand Children Elements");  
Console.WriteLine("----");  
foreach (XElement de in greatGrandChildren)  
    Console.WriteLine(de.Name);  

IEnumerable<XElement> allAncestors =  
    from el in greatGrandChildren.Ancestors().Distinct()  
    select el;  

Console.WriteLine("");  
Console.WriteLine("Ancestors");  
Console.WriteLine("----");  
foreach (XElement de in allAncestors)  
    Console.WriteLine(de.Name);  
Imports <xmlns="http://www.adventure-works.com">  

Module Module1  
    Sub Main()  
        Dim xmlTree As XElement = _  
            <Root>  
                <Child1>  
                    <GrandChild1>  
                        <GreatGrandChild1>content</GreatGrandChild1>  
                    </GrandChild1>  
                </Child1>  
                <Child2>  
                    <GrandChild2>  
                        <GreatGrandChild2>content</GreatGrandChild2>  
                    </GrandChild2>  
                </Child2>  
            </Root>  

        Dim greatGrandChildren = From el In xmlTree.Descendants _  
                                 Where el.Name.LocalName.StartsWith("Great") _  
                                 Select el  

        Console.WriteLine("Great Grand Children Elements")  
        Console.WriteLine("----")  

        For Each de As XElement In greatGrandChildren  
            Console.WriteLine(de.Name)  
        Next  

        Dim allAncestors = From el In greatGrandChildren.Ancestors.Distinct _  
                           Select el  

        Console.WriteLine("")  
        Console.WriteLine("Ancestors")  
        Console.WriteLine("----")  

        For Each de As XElement In allAncestors  
            Console.WriteLine(de.Name)  
        Next  
    End Sub  
End Module  

Dieses Beispiel erzeugt die folgende Ausgabe:

Great Grand Children Elements  
----  
{http://www.adventure-works.com}GreatGrandChild1  
{http://www.adventure-works.com}GreatGrandChild2  

Ancestors  
----  
{http://www.adventure-works.com}GrandChild1  
{http://www.adventure-works.com}Child1  
{http://www.adventure-works.com}Root  
{http://www.adventure-works.com}GrandChild2  
{http://www.adventure-works.com}Child2  

Hinweise

Wenn mehrere Knoten in der Quellsammlung denselben Vorgänger aufweisen, wird der Vorgänger mehrmals in die Ergebnissammlung einbezogen. Um dies zu vermeiden, verwenden Sie die Distinct Methode.

Diese Methode verwendet verzögerte Ausführung.

Siehe auch

Gilt für:

Ancestors<T>(IEnumerable<T>, XName)

Gibt eine gefilterte Auflistung von Elementen zurück, die die übergeordneten Elemente der einzelnen Knoten in der Quellauflistung enthält. Nur Elemente, die über einen übereinstimmenden XName verfügen, sind in der Auflistung enthalten.

public:
generic <typename T>
 where T : System::Xml::Linq::XNode[System::Runtime::CompilerServices::Extension]
 static System::Collections::Generic::IEnumerable<System::Xml::Linq::XElement ^> ^ Ancestors(System::Collections::Generic::IEnumerable<T> ^ source, System::Xml::Linq::XName ^ name);
public static System.Collections.Generic.IEnumerable<System.Xml.Linq.XElement> Ancestors<T> (this System.Collections.Generic.IEnumerable<T> source, System.Xml.Linq.XName name) where T : System.Xml.Linq.XNode;
public static System.Collections.Generic.IEnumerable<System.Xml.Linq.XElement> Ancestors<T> (this System.Collections.Generic.IEnumerable<T?> source, System.Xml.Linq.XName? name) where T : System.Xml.Linq.XNode;
static member Ancestors : seq<'T (requires 'T :> System.Xml.Linq.XNode)> * System.Xml.Linq.XName -> seq<System.Xml.Linq.XElement> (requires 'T :> System.Xml.Linq.XNode)
<Extension()>
Public Function Ancestors(Of T As XNode) (source As IEnumerable(Of T), name As XName) As IEnumerable(Of XElement)

Typparameter

T

Der Typ der Objekte in source, auf XNode beschränkt.

Parameter

source
IEnumerable<T>

Ein IEnumerable<T> vom Typ XNode, das die Quellauflistung enthält.

name
XName

Der XName, mit dem eine Übereinstimmung gefunden werden soll.

Gibt zurück

IEnumerable<XElement>

Ein IEnumerable<T> vom Typ XElement, das die übergeordneten Elemente der einzelnen Knoten in der Quellauflistung enthält. Nur Elemente, die über einen übereinstimmenden XName verfügen, sind in der Auflistung enthalten.

Beispiele

Im folgenden Beispiel wird eine Sammlung der Großen Enkelelemente abgerufen. Anschließend wird diese Achsenmethode verwendet, um alle Vorgänger aller Elemente in der Auflistung abzurufen, die einem angegebenen entsprechen XName.

XElement xmlTree = new XElement("Root",  
    new XElement("Child1",  
        new XElement("GrandChild1",  
            new XElement("GreatGrandChild1", "content")  
        )  
    ),  
    new XElement("Child2",  
        new XElement("GrandChild2",  
            new XElement("GreatGrandChild2", "content")  
        )  
    )  
);  
IEnumerable<XElement> greatGrandChildren =  
    from el in xmlTree.Descendants()  
    where el.Name.LocalName.StartsWith("Great")  
    select el;  

Console.WriteLine("Great Grand Children Elements");  
Console.WriteLine("----");  
foreach (XElement de in greatGrandChildren)  
    Console.WriteLine(de.Name);  

IEnumerable<XElement> allAncestors =  
    from el in greatGrandChildren.Ancestors("Child1")  
    select el;  

Console.WriteLine("");  
Console.WriteLine("Ancestors");  
Console.WriteLine("----");  
foreach (XElement de in allAncestors)  
    Console.WriteLine(de.Name);  
Dim xmlTree As XElement = _  
    <Root>  
        <Child1>  
            <GrandChild1>  
                <GreatGrandChild1>content</GreatGrandChild1>  
            </GrandChild1>  
        </Child1>  
        <Child2>  
            <GrandChild2>  
                <GreatGrandChild2>content</GreatGrandChild2>  
            </GrandChild2>  
        </Child2>  
    </Root>  

Dim greatGrandChildren = From el In xmlTree.Descendants _  
                         Where el.Name.LocalName.StartsWith("Great") _  
                         Select el  

Console.WriteLine("Great Grand Children Elements")  
Console.WriteLine("----")  

For Each de As XElement In greatGrandChildren  
    Console.WriteLine(de.Name)  
Next  

Dim allAncestors = From el In greatGrandChildren.Ancestors("Child1") _  
                   Select el  

Console.WriteLine("")  
Console.WriteLine("Ancestors")  
Console.WriteLine("----")  

For Each de As XElement In allAncestors  
    Console.WriteLine(de.Name)  
Next  

Dieses Beispiel erzeugt die folgende Ausgabe:

Great Grand Children Elements  
----  
GreatGrandChild1  
GreatGrandChild2  

Ancestors  
----  
Child1  

Das folgende Beispiel ist 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 = new XElement(aw + "Root",  
    new XElement(aw + "Child1",  
        new XElement(aw + "GrandChild1",  
            new XElement(aw + "GreatGrandChild1", "content")  
        )  
    ),  
    new XElement(aw + "Child2",  
        new XElement(aw + "GrandChild2",  
            new XElement(aw + "GreatGrandChild2", "content")  
        )  
    )  
);  
IEnumerable<XElement> greatGrandChildren =  
    from el in xmlTree.Descendants()  
    where el.Name.LocalName.StartsWith("Great")  
    select el;  

Console.WriteLine("Great Grand Children Elements");  
Console.WriteLine("----");  
foreach (XElement de in greatGrandChildren)  
    Console.WriteLine(de.Name);  

IEnumerable<XElement> allAncestors =  
    from el in greatGrandChildren.Ancestors(aw + "Child1")  
    select el;  

Console.WriteLine("");  
Console.WriteLine("Ancestors");  
Console.WriteLine("----");  
foreach (XElement de in allAncestors)  
    Console.WriteLine(de.Name);  
Imports <xmlns="http://www.adventure-works.com">  

Module Module1  
    Sub Main()  
        Dim xmlTree As XElement = _  
            <Root>  
                <Child1>  
                    <GrandChild1>  
                        <GreatGrandChild1>content</GreatGrandChild1>  
                    </GrandChild1>  
                </Child1>  
                <Child2>  
                    <GrandChild2>  
                        <GreatGrandChild2>content</GreatGrandChild2>  
                    </GrandChild2>  
                </Child2>  
            </Root>  

        Dim greatGrandChildren = From el In xmlTree.Descendants _  
                                 Where el.Name.LocalName.StartsWith("Great") _  
                                 Select el  

        Console.WriteLine("Great Grand Children Elements")  
        Console.WriteLine("----")  

        For Each de As XElement In greatGrandChildren  
            Console.WriteLine(de.Name)  
        Next  

        Dim allAncestors = From el In greatGrandChildren.Ancestors(GetXmlNamespace() + "Child1") _  
                           Select el  

        Console.WriteLine("")  
        Console.WriteLine("Ancestors")  
        Console.WriteLine("----")  

        For Each de As XElement In allAncestors  
            Console.WriteLine(de.Name)  
        Next  
    End Sub  
End Module  

Dieses Beispiel erzeugt die folgende Ausgabe:

Great Grand Children Elements  
----  
{http://www.adventure-works.com}GreatGrandChild1  
{http://www.adventure-works.com}GreatGrandChild2  

Ancestors  
----  
{http://www.adventure-works.com}Child1  

Hinweise

Wenn mehrere Knoten in der Quellsammlung mit einem übereinstimmenden XNameVorgänger identisch sind, wird der Vorgänger mehrmals in die Ergebnissammlung einbezogen.

Diese Methode verwendet verzögerte Ausführung.

Siehe auch

Gilt für: