Extensions.AncestorsAndSelf Method

Definition

Devuelve una colección de elementos que contiene todos los elementos y sus antecesores de la colección de origen.Returns a collection of elements that contains every element in the source collection, and the ancestors of every element in the source collection.

Overloads

AncestorsAndSelf(IEnumerable<XElement>)

Devuelve una colección de elementos que contiene todos los elementos y sus antecesores de la colección de origen.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)

Devuelve una colección de elementos filtrada que contiene todos los elementos y sus antecesores de la colección de origen.Returns a filtered collection of elements that contains every element in the source collection, and the ancestors of every element in the source collection. En la colección sólo se incluyen los elementos que tienen un objeto XName coincidente.Only elements that have a matching XName are included in the collection.

Remarks

Si varios nodos de la colección de origen tienen el mismo antecesor, el antecesor se incluirá varias veces en la colección de resultados.If multiple nodes in the source collection have the same ancestor, the ancestor will be included multiple times in the result collection. Para evitar esto, utilice el método Distinct.To avoid this, use the Distinct method.

Este método usa la ejecución diferida.This method uses deferred execution.

AncestorsAndSelf(IEnumerable<XElement>)

Devuelve una colección de elementos que contiene todos los elementos y sus antecesores de la colección de origen.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)

Parameters

source
IEnumerable<XElement>

Interfaz IEnumerable<T> de XElement que contiene la colección de origen.An IEnumerable<T> of XElement that contains the source collection.

Returns

IEnumerable<XElement>

Interfaz IEnumerable<T> de XElement que contiene todos los elementos y sus antecesores de la colección de origen.An IEnumerable<T> of XElement that contains every element in the source collection, and the ancestors of every element in the source collection.

Examples

En el ejemplo siguiente se recupera una colección de los excelentes elementos descendientes.The following example retrieves a collection of the great grandchildren elements. A continuación, usa este método de eje para recuperar todos los antecesores y todos los elementos de la colección.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  
  

En este ejemplo se produce la siguiente salida:This example produces the following output:

Great Grand Children Elements  
----  
GreatGrandChild1  
GreatGrandChild2  
  
Ancestors and Self  
----  
GreatGrandChild1  
GrandChild1  
Child1  
Root  
GreatGrandChild2  
GrandChild2  
Child2  

El siguiente ejemplo es el mismo, pero en este caso el XML está en un espacio de nombres.The following is the same example, but in this case the XML is in a namespace. Para obtener más información, vea trabajar con espacios de nombres 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  
  

En este ejemplo se produce la siguiente salida: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  

Remarks

Si varios nodos de la colección de origen tienen el mismo antecesor, el antecesor se incluirá varias veces en la colección de resultados.If multiple nodes in the source collection have the same ancestor, the ancestor will be included multiple times in the result collection. Para evitar esto, utilice el método Distinct.To avoid this, use the Distinct method.

Este método usa la ejecución diferida.This method uses deferred execution.

See also

AncestorsAndSelf(IEnumerable<XElement>, XName)

Devuelve una colección de elementos filtrada que contiene todos los elementos y sus antecesores de la colección de origen.Returns a filtered collection of elements that contains every element in the source collection, and the ancestors of every element in the source collection. En la colección sólo se incluyen los elementos que tienen un objeto XName coincidente.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)

Parameters

source
IEnumerable<XElement>

Interfaz IEnumerable<T> de XElement que contiene la colección de origen.An IEnumerable<T> of XElement that contains the source collection.

name
XName

XName que se va a comparar.The XName to match.

Returns

IEnumerable<XElement>

Interfaz IEnumerable<T> de XElement que contiene todos los elementos y sus antecesores de la colección de origen.An IEnumerable<T> of XElement that contains every element in the source collection, and the ancestors of every element in the source collection. En la colección sólo se incluyen los elementos que tienen un objeto XName coincidente.Only elements that have a matching XName are included in the collection.

Examples

En el ejemplo siguiente se recupera una colección de los excelentes elementos descendientes.The following example retrieves a collection of the great grandchildren elements. A continuación, usa este método de eje para recuperar todos los elementos propios y antecesores de todos los elementos de la colección que coinciden con un XNameespecificado.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  
  

En este ejemplo se produce la siguiente salida:This example produces the following output:

Great Grand Children Elements  
----  
GreatGrandChild1  
GreatGrandChild2  
  
Ancestors and Self  
----  
GreatGrandChild1  

El siguiente ejemplo es el mismo, pero en este caso el XML está en un espacio de nombres.The following is the same example, but in this case the XML is in a namespace. Para obtener más información, vea trabajar con espacios de nombres 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  
  

En este ejemplo se produce la siguiente salida: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  

Remarks

Si varios nodos de la colección de origen tienen el mismo antecesor con una coincidencia XName, el antecesor se incluirá varias veces en la colección de resultados.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.

Este método usa la ejecución diferida.This method uses deferred execution.

See also

Applies to