Extensions.AncestorsAndSelf Método

Definición

Devuelve una colección de elementos que contiene todos los elementos de la colección de origen y los antecesores de todos los elementos de la colección de origen.

Sobrecargas

Nombre Description
AncestorsAndSelf(IEnumerable<XElement>)

Devuelve una colección de elementos que contiene todos los elementos de la colección de origen y los antecesores de todos los elementos de la colección de origen.

AncestorsAndSelf(IEnumerable<XElement>, XName)

Devuelve una colección filtrada de elementos que contiene todos los elementos de la colección de origen y los antecesores de todos los elementos de la colección de origen. En la colección solo se incluyen los elementos que tienen una XName coincidente.

Comentarios

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. Para evitar esto, use el Distinct método .

Este método usa la ejecución diferida.

AncestorsAndSelf(IEnumerable<XElement>)

Source:
Extensions.cs
Source:
Extensions.cs
Source:
Extensions.cs
Source:
Extensions.cs
Source:
Extensions.cs

Devuelve una colección de elementos que contiene todos los elementos de la colección de origen y los antecesores de todos los elementos de la colección de origen.

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)

Parámetros

source
IEnumerable<XElement>

IEnumerable<T> de XElement que contiene la colección de origen.

Devoluciones

IEnumerable<T> de XElement que contiene todos los elementos de la colección de origen y los antecesores de todos los elementos de la colección de origen.

Ejemplos

En el ejemplo siguiente se recupera una colección de los grandes elementos de los nietos. A continuación, usa este método de eje para recuperar todos los antecesores y el propio de todos los elementos de la colección.

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

Este ejemplo produce el siguiente resultado:

Great Grand Children Elements
----
GreatGrandChild1
GreatGrandChild2

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

A continuación se muestra el mismo ejemplo, pero en este caso el XML está en un espacio de nombres. Para obtener más información, vea Trabajar con espacios de nombres XML.

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

Este ejemplo produce el siguiente resultado:

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

Comentarios

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. Para evitar esto, use el Distinct método .

Este método usa la ejecución diferida.

Consulte también

Se aplica a

AncestorsAndSelf(IEnumerable<XElement>, XName)

Source:
Extensions.cs
Source:
Extensions.cs
Source:
Extensions.cs
Source:
Extensions.cs
Source:
Extensions.cs

Devuelve una colección filtrada de elementos que contiene todos los elementos de la colección de origen y los antecesores de todos los elementos de la colección de origen. En la colección solo se incluyen los elementos que tienen una XName coincidente.

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)

Parámetros

source
IEnumerable<XElement>

IEnumerable<T> de XElement que contiene la colección de origen.

name
XName

que XName se va a coincidir.

Devoluciones

IEnumerable<T> de XElement que contiene todos los elementos de la colección de origen y los antecesores de todos los elementos de la colección de origen. En la colección solo se incluyen los elementos que tienen una XName coincidente.

Ejemplos

En el ejemplo siguiente se recupera una colección de los grandes elementos de los nietos. A continuación, usa este método de eje para recuperar todos los elementos auto y antecesores de todos los elementos de la colección que coinciden con un especificado 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

Este ejemplo produce el siguiente resultado:

Great Grand Children Elements
----
GreatGrandChild1
GreatGrandChild2

Ancestors and Self
----
GreatGrandChild1

A continuación se muestra el mismo ejemplo, pero en este caso el XML está en un espacio de nombres. Para obtener más información, vea Trabajar con espacios de nombres XML.

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

Este ejemplo produce el siguiente resultado:

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

Comentarios

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.

Este método usa la ejecución diferida.

Consulte también

Se aplica a