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 Distinct il metodo.To avoid this, use the Distinct method.

Questo metodo utilizza 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);
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<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.

Esempi

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  
  

Questo esempio produce il seguente output: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 utilizzo degli 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.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  
  

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 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 Distinct il metodo.To avoid this, use the Distinct method.

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

Vedi anche

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

Esempi

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 XNameun oggetto specificato.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  
  

Questo esempio produce il seguente output: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 utilizzo degli 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.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  
  

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 and Self  
----  
{http://www.adventure-works.com}GreatGrandChild1  

Commenti

Se più nodi nella raccolta di origine hanno lo stesso predecessore con una XNamecorrispondenza, 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 utilizza l'esecuzione posticipata.This method uses deferred execution.

Vedi anche

Si applica a