Udostępnij za pośrednictwem


Extensions.AncestorsAndSelf Metoda

Definicja

Zwraca kolekcję elementów, które zawierają każdy element w kolekcji źródłowej i elementy podrzędne każdego elementu w kolekcji źródłowej.

Przeciążenia

AncestorsAndSelf(IEnumerable<XElement>)

Zwraca kolekcję elementów, które zawierają każdy element w kolekcji źródłowej i elementy podrzędne każdego elementu w kolekcji źródłowej.

AncestorsAndSelf(IEnumerable<XElement>, XName)

Zwraca odfiltrowaną kolekcję elementów, które zawierają każdy element w kolekcji źródłowej, oraz elementów podrzędnych każdego elementu w kolekcji źródłowej. W kolekcji znajdują się tylko elementy, które mają dopasowanie XName .

Uwagi

Jeśli wiele węzłów w kolekcji źródłowej ma ten sam element nadrzędny, obiekt nadrzędny zostanie uwzględniony wiele razy w kolekcji wyników. Aby tego uniknąć, użyj Distinct metody .

Ta metoda używa odroczonego wykonania.

AncestorsAndSelf(IEnumerable<XElement>)

Źródło:
Extensions.cs
Źródło:
Extensions.cs
Źródło:
Extensions.cs

Zwraca kolekcję elementów, które zawierają każdy element w kolekcji źródłowej i elementy podrzędne każdego elementu w kolekcji źródłowej.

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)

Parametry

source
IEnumerable<XElement>

XElement Element IEnumerable<T> zawierający kolekcję źródłową.

Zwraca

XElement Element IEnumerable<T> zawierający każdy element w kolekcji źródłowej oraz elementy będące elementami źródłowymi w kolekcji źródłowej.

Przykłady

Poniższy przykład pobiera kolekcję elementów prawnuków. Następnie używa tej metody osi do pobierania wszystkich elementów przodków i siebie wszystkich elementów w kolekcji.

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  

Ten przykład generuje następujące wyniki:

Great Grand Children Elements  
----  
GreatGrandChild1  
GreatGrandChild2  

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

Poniżej przedstawiono ten sam przykład, ale w tym przypadku kod XML znajduje się w przestrzeni nazw. Aby uzyskać więcej informacji, zobacz Praca z przestrzeniami nazw 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  

Ten przykład generuje następujące wyniki:

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  

Uwagi

Jeśli wiele węzłów w kolekcji źródłowej ma ten sam element nadrzędny, obiekt nadrzędny zostanie uwzględniony wiele razy w kolekcji wyników. Aby tego uniknąć, użyj Distinct metody .

Ta metoda używa odroczonego wykonania.

Zobacz też

Dotyczy

AncestorsAndSelf(IEnumerable<XElement>, XName)

Źródło:
Extensions.cs
Źródło:
Extensions.cs
Źródło:
Extensions.cs

Zwraca odfiltrowaną kolekcję elementów, które zawierają każdy element w kolekcji źródłowej, oraz elementów podrzędnych każdego elementu w kolekcji źródłowej. W kolekcji znajdują się tylko elementy, które mają dopasowanie XName .

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)

Parametry

source
IEnumerable<XElement>

XElement Element IEnumerable<T> zawierający kolekcję źródłową.

name
XName

Element XName do dopasowania.

Zwraca

XElement Element IEnumerable<T> zawierający każdy element w kolekcji źródłowej oraz elementy będące elementami źródłowymi w kolekcji źródłowej. W kolekcji znajdują się tylko elementy, które mają dopasowanie XName .

Przykłady

Poniższy przykład pobiera kolekcję elementów prawnuków. Następnie używa tej metody osi do pobierania wszystkich elementów własnych i elementów w kolekcji, które pasują do określonego XNameelementu .

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  

Ten przykład generuje następujące wyniki:

Great Grand Children Elements  
----  
GreatGrandChild1  
GreatGrandChild2  

Ancestors and Self  
----  
GreatGrandChild1  

Poniżej przedstawiono ten sam przykład, ale w tym przypadku kod XML znajduje się w przestrzeni nazw. Aby uzyskać więcej informacji, zobacz Praca z przestrzeniami nazw 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  

Ten przykład generuje następujące wyniki:

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  

Uwagi

Jeśli wiele węzłów w kolekcji źródłowej ma ten sam element nadrzędny z pasującym XNameelementem , element nadrzędny zostanie uwzględniony wiele razy w kolekcji wyników.

Ta metoda używa odroczonego wykonania.

Zobacz też

Dotyczy