Extensions.AncestorsAndSelf Metodo

Definizione

Restituisce una raccolta di elementi che contiene ciascun elemento nella raccolta di origine e i predecessori di ciascun elemento nella raccolta di origine.Returns a collection of elements that contains every element in the source collection, and the ancestors of every element in the source collection.

Overload

AncestorsAndSelf(IEnumerable<XElement>)

Restituisce una raccolta di elementi che contiene ciascun elemento nella raccolta di origine e i predecessori di ciascun elemento nella raccolta di origine.Returns a collection of elements that contains every element in the source collection, and the ancestors of every element in the source collection.

AncestorsAndSelf(IEnumerable<XElement>, XName)

Restituisce una raccolta di elementi filtrati che contiene ciascun elemento nella raccolta di origine e i predecessori di ciascun elemento nella raccolta di origine.Returns a filtered collection of elements that contains every element in the source collection, and the ancestors of every element 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à incluso più volte nella raccolta dei 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 usa l'esecuzione posticipata.This method uses deferred execution.

AncestorsAndSelf(IEnumerable<XElement>)

Restituisce una raccolta di elementi che contiene ciascun elemento nella raccolta di origine e i predecessori di ciascun elemento nella raccolta di origine.Returns a collection of elements that contains every element in the source collection, and the ancestors of every element in the source collection.

public:
[System::Runtime::CompilerServices::Extension]
 static System::Collections::Generic::IEnumerable<System::Xml::Linq::XElement ^> ^ AncestorsAndSelf(System::Collections::Generic::IEnumerable<System::Xml::Linq::XElement ^> ^ source);
public static System.Collections.Generic.IEnumerable<System.Xml.Linq.XElement> AncestorsAndSelf (this System.Collections.Generic.IEnumerable<System.Xml.Linq.XElement> source);
public static System.Collections.Generic.IEnumerable<System.Xml.Linq.XElement> AncestorsAndSelf (this System.Collections.Generic.IEnumerable<System.Xml.Linq.XElement?> source);
static member AncestorsAndSelf : seq<System.Xml.Linq.XElement> -> seq<System.Xml.Linq.XElement>
<Extension()>
Public Function AncestorsAndSelf (source As IEnumerable(Of XElement)) As IEnumerable(Of XElement)

Parametri

source
IEnumerable<XElement>

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

Restituisce

IEnumerable<XElement>

IEnumerable<T> di XElement che contiene ciascun elemento nella raccolta di origine e i predecessori di ciascun elemento nella raccolta di origine.An IEnumerable<T> of XElement that contains every element in the source collection, and the ancestors of every element in the source collection.

Esempio

Nell'esempio seguente viene recuperata una raccolta di elementi nipoti eccezionali.The following example retrieves a collection of the great grandchildren elements. Viene quindi usato questo metodo dell'asse per recuperare tutti i predecessori e l'autonomia di tutti gli elementi nella raccolta.It then uses this axis method to retrieve all ancestors and self 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.AncestorsAndSelf().Distinct()  
    select el;  

Console.WriteLine("");  
Console.WriteLine("Ancestors and Self");  
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.AncestorsAndSelf.Distinct _  
                   Select el  

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

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

Nell'esempio viene prodotto l'output seguente:This example produces the following output:

Great Grand Children Elements  
----  
GreatGrandChild1  
GreatGrandChild2  

Ancestors and Self  
----  
GreatGrandChild1  
GrandChild1  
Child1  
Root  
GreatGrandChild2  
GrandChild2  
Child2  

Di seguito è riportato lo stesso esempio, ma in questo caso il codice XML si trova in uno spazio dei nomi.The following is the same example, but in this case the XML is in a namespace. Per ulteriori informazioni, vedere utilizzare spazi dei nomi XML.For more information, see Work 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.AncestorsAndSelf().Distinct()  
    select el;  

Console.WriteLine("");  
Console.WriteLine("Ancestors and Self");  
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.AncestorsAndSelf.Distinct _  
                           Select el  

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

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

Nell'esempio viene prodotto l'output seguente:This example produces the following output:

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

Ancestors and Self  
----  
{http://www.adventure-works.com}GreatGrandChild1  
{http://www.adventure-works.com}GrandChild1  
{http://www.adventure-works.com}Child1  
{http://www.adventure-works.com}Root  
{http://www.adventure-works.com}GreatGrandChild2  
{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à incluso più volte nella raccolta dei 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 usa l'esecuzione posticipata.This method uses deferred execution.

Vedi anche

Si applica a

AncestorsAndSelf(IEnumerable<XElement>, XName)

Restituisce una raccolta di elementi filtrati che contiene ciascun elemento nella raccolta di origine e i predecessori di ciascun elemento nella raccolta di origine.Returns a filtered collection of elements that contains every element in the source collection, and the ancestors of every element 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:
[System::Runtime::CompilerServices::Extension]
 static System::Collections::Generic::IEnumerable<System::Xml::Linq::XElement ^> ^ AncestorsAndSelf(System::Collections::Generic::IEnumerable<System::Xml::Linq::XElement ^> ^ source, System::Xml::Linq::XName ^ name);
public static System.Collections.Generic.IEnumerable<System.Xml.Linq.XElement> AncestorsAndSelf (this System.Collections.Generic.IEnumerable<System.Xml.Linq.XElement> source, System.Xml.Linq.XName name);
public static System.Collections.Generic.IEnumerable<System.Xml.Linq.XElement> AncestorsAndSelf (this System.Collections.Generic.IEnumerable<System.Xml.Linq.XElement?> source, System.Xml.Linq.XName? name);
static member AncestorsAndSelf : seq<System.Xml.Linq.XElement> * System.Xml.Linq.XName -> seq<System.Xml.Linq.XElement>
<Extension()>
Public Function AncestorsAndSelf (source As IEnumerable(Of XElement), name As XName) As IEnumerable(Of XElement)

Parametri

source
IEnumerable<XElement>

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

name
XName

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

Restituisce

IEnumerable<XElement>

IEnumerable<T> di XElement che contiene ciascun elemento nella raccolta di origine e i predecessori di ciascun elemento nella raccolta di origine.An IEnumerable<T> of XElement that contains every element in the source collection, and the ancestors of every element 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.

Esempio

Nell'esempio seguente viene recuperata una raccolta di elementi nipoti eccezionali.The following example retrieves a collection of the great grandchildren elements. USA quindi questo metodo axis per recuperare tutti i predecessori e i predecessori di tutti gli elementi della raccolta che corrispondono a un oggetto specificato XName .It then uses this axis method to retrieve all self and 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.AncestorsAndSelf("GreatGrandChild1")  
    select el;  

Console.WriteLine("");  
Console.WriteLine("Ancestors and Self");  
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.AncestorsAndSelf("GreatGrandChild1") _  
                   Select el  

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

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

Nell'esempio viene prodotto l'output seguente:This example produces the following output:

Great Grand Children Elements  
----  
GreatGrandChild1  
GreatGrandChild2  

Ancestors and Self  
----  
GreatGrandChild1  

Di seguito è riportato lo stesso esempio, ma in questo caso il codice XML si trova in uno spazio dei nomi.The following is the same example, but in this case the XML is in a namespace. Per ulteriori informazioni, vedere utilizzare spazi dei nomi XML.For more information, see Work 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.AncestorsAndSelf(aw + "GreatGrandChild1")  
    select el;  

Console.WriteLine("");  
Console.WriteLine("Ancestors and Self");  
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.AncestorsAndSelf(GetXmlNamespace() + "GreatGrandChild1") _  
                           Select el  

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

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

Nell'esempio viene prodotto l'output seguente:This example produces the following output:

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

Ancestors and Self  
----  
{http://www.adventure-works.com}GreatGrandChild1  

Commenti

Se più nodi nella raccolta di origine hanno lo stesso predecessore con una corrispondenza XName , il predecessore verrà incluso più volte nella raccolta dei 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 usa l'esecuzione posticipata.This method uses deferred execution.

Vedi anche

Si applica a