Extensions.Ancestors Extensions.Ancestors Extensions.Ancestors Extensions.Ancestors Method

Definizione

Restituisce una raccolta di elementi che contiene i predecessori di ciascun nodo nella raccolta di origine.Returns a collection of elements that contains the ancestors of every node in the source collection.

Overload

Ancestors<T>(IEnumerable<T>) Ancestors<T>(IEnumerable<T>) Ancestors<T>(IEnumerable<T>) Ancestors<T>(IEnumerable<T>)

Restituisce una raccolta di elementi che contiene i predecessori di ciascun nodo nella raccolta di origine.Returns a collection of elements that contains the ancestors of every node in the source collection.

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

Restituisce una raccolta di elementi filtrati che contiene i predecessori di ciascun nodo nella raccolta di origine.Returns a filtered collection of elements that contains the ancestors of every node in the source collection. Solo gli elementi che hanno un oggetto XName corrispondente vengono inclusi nella raccolta.Only elements that have a matching XName are included in the collection.

Commenti

Se più nodi nella raccolta di origine hanno lo stesso predecessore, il predecessore verrà inclusi più volte nella raccolta di risultati.If multiple nodes in the source collection have the same ancestor, the ancestor will be included multiple times in the result collection. Per evitare questo problema, usare il Distinct (metodo).To avoid this, use the Distinct method.

Questo metodo utilizza l'esecuzione posticipata.This method uses deferred execution.

Ancestors<T>(IEnumerable<T>) Ancestors<T>(IEnumerable<T>) Ancestors<T>(IEnumerable<T>) Ancestors<T>(IEnumerable<T>)

Restituisce una raccolta di elementi che contiene i predecessori di ciascun nodo nella raccolta di origine.Returns a collection of elements that contains the ancestors of every node in the source collection.

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;
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)

Parametri di tipo

T

Tipo di oggetti in source vincolati a XNode.The type of the objects in source, constrained to XNode.

Parametri

source
IEnumerable<T> IEnumerable<T> IEnumerable<T> IEnumerable<T>

IEnumerable<T> di XNode che contiene la raccolta di origine.An IEnumerable<T> of XNode that contains the source collection.

Restituisce

IEnumerable<T> di XElement che contiene i predecessori di ciascun nodo nella raccolta di origine.An IEnumerable<T> of XElement that contains the ancestors of every node in the source collection.

Esempi

Nell'esempio seguente recupera una raccolta di elementi nipote eccezionali.The following example retrieves a collection of the great grandchildren elements. Utilizza quindi questo metodo dell'asse per recuperare tutti i predecessori di tutti gli elementi nella raccolta.It then uses this axis method to retrieve all ancestors of all elements in the collection.

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  

Questo esempio produce il seguente output:This example produces the following output:

Great Grand Children Elements  
----  
GreatGrandChild1  
GreatGrandChild2  

Ancestors  
----  
GrandChild1  
Child1  
Root  
GrandChild2  
Child2  

Di seguito è riportato lo stesso esempio, ma in questo caso il codice XML è in uno spazio dei nomi.The following is the same example, but in this case the XML is in a namespace. Per altre informazioni, vedere uso di spazi dei nomi XML.For more information, see Working with 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  

Questo esempio produce il seguente output:This example produces the following output:

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  

Commenti

Se più nodi nella raccolta di origine hanno lo stesso predecessore, il predecessore verrà inclusi più volte nella raccolta di risultati.If multiple nodes in the source collection have the same ancestor, the ancestor will be included multiple times in the result collection. Per evitare questo problema, usare il Distinct (metodo).To avoid this, use the Distinct method.

Questo metodo utilizza l'esecuzione posticipata.This method uses deferred execution.

Vedi anche

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

Restituisce una raccolta di elementi filtrati che contiene i predecessori di ciascun nodo nella raccolta di origine.Returns a filtered collection of elements that contains the ancestors of every node in the source collection. Solo gli elementi che hanno un oggetto XName corrispondente vengono inclusi nella raccolta.Only elements that have a matching XName are included in the collection.

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;
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)

Parametri di tipo

T

Tipo di oggetti in source vincolati a XNode.The type of the objects in source, constrained to XNode.

Parametri

source
IEnumerable<T> IEnumerable<T> IEnumerable<T> IEnumerable<T>

IEnumerable<T> di XNode che contiene la raccolta di origine.An IEnumerable<T> of XNode that contains the source collection.

name
XName XName XName XName

Oggetto XName di cui trovare la corrispondenza.The XName to match.

Restituisce

IEnumerable<T> di XElement che contiene i predecessori di ciascun nodo nella raccolta di origine.An IEnumerable<T> of XElement that contains the ancestors of every node in the source collection. Solo gli elementi che hanno un oggetto XName corrispondente vengono inclusi nella raccolta.Only elements that have a matching XName are included in the collection.

Esempi

Nell'esempio seguente recupera una raccolta di elementi nipote eccezionali.The following example retrieves a collection of the great grandchildren elements. Usa quindi questo metodo dell'asse per recuperare tutti i predecessori di tutti gli elementi nella raccolta che soddisfano un determinato XName.It then uses this axis method to retrieve all ancestors of all elements in the collection that match a specified 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  

Questo esempio produce il seguente output:This example produces the following output:

Great Grand Children Elements  
----  
GreatGrandChild1  
GreatGrandChild2  

Ancestors  
----  
Child1  

Di seguito è riportato lo stesso esempio, ma in questo caso il codice XML è in uno spazio dei nomi.The following is the same example, but in this case the XML is in a namespace. Per altre informazioni, vedere uso di spazi dei nomi XML.For more information, see Working with 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  

Questo esempio produce il seguente output:This example produces the following output:

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

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

Commenti

Se più nodi nella raccolta di origine hanno lo stesso predecessore con una corrispondenza XName, predecessore verrà inclusi più volte nella raccolta di risultati.If multiple nodes in the source collection have the same ancestor with a matching XName, the ancestor will be included multiple times in the result collection.

Questo metodo utilizza l'esecuzione posticipata.This method uses deferred execution.

Vedi anche

Si applica a