Extensions.AncestorsAndSelf Extensions.AncestorsAndSelf Extensions.AncestorsAndSelf Extensions.AncestorsAndSelf Method

定義

傳回包含來源集合中每個項目的項目集合,以及來源集合中每個項目的祖系。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>) AncestorsAndSelf(IEnumerable<XElement>) AncestorsAndSelf(IEnumerable<XElement>) AncestorsAndSelf(IEnumerable<XElement>)

傳回包含來源集合中每個項目的項目集合,以及來源集合中每個項目的祖系。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) AncestorsAndSelf(IEnumerable<XElement>, XName) AncestorsAndSelf(IEnumerable<XElement>, XName) AncestorsAndSelf(IEnumerable<XElement>, XName)

傳回包含來源集合中每個項目的已篩選項目集合,以及來源集合中每個項目的祖系。Returns a filtered collection of elements that contains every element in the source collection, and the ancestors of every element in the source collection. 集合中只會包含具有相符之 XName 的項目。Only elements that have a matching XName are included in the collection.

備註

如果來源集合中的多個節點有相同的上階,祖系將會包含多個時間結果集合。If multiple nodes in the source collection have the same ancestor, the ancestor will be included multiple times in the result collection. 若要避免這個問題,請使用Distinct方法。To avoid this, use the Distinct method.

這個方法會使用延後的執行。This method uses deferred execution.

AncestorsAndSelf(IEnumerable<XElement>) AncestorsAndSelf(IEnumerable<XElement>) AncestorsAndSelf(IEnumerable<XElement>) AncestorsAndSelf(IEnumerable<XElement>)

傳回包含來源集合中每個項目的項目集合,以及來源集合中每個項目的祖系。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)

參數

source
IEnumerable<XElement>

IEnumerable<T>XElement,其中包含來源集合。An IEnumerable<T> of XElement that contains the source collection.

傳回

IEnumerable<T>XElement,包含來源集合中的每個項目,以及來源集合中每個項目的祖系。An IEnumerable<T> of XElement that contains every element in the source collection, and the ancestors of every element in the source collection.

範例

下列範例會擷取很棒的孫代項目的集合。The following example retrieves a collection of the great grandchildren elements. 然後,它會使用此座標軸方法來擷取所有上階和自我集合中的所有項目。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  

這個範例會產生下列輸出:This example produces the following output:

Great Grand Children Elements  
----  
GreatGrandChild1  
GreatGrandChild2  

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

以下是相同的範例,但在此情況下的 XML 位於命名空間。The following is the same example, but in this case the XML is in a namespace. 如需詳細資訊,請參閱 < 處理 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  

這個範例會產生下列輸出: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  

備註

如果來源集合中的多個節點有相同的上階,祖系將會包含多個時間結果集合。If multiple nodes in the source collection have the same ancestor, the ancestor will be included multiple times in the result collection. 若要避免這個問題,請使用Distinct方法。To avoid this, use the Distinct method.

這個方法會使用延後的執行。This method uses deferred execution.

另請參閱

AncestorsAndSelf(IEnumerable<XElement>, XName) AncestorsAndSelf(IEnumerable<XElement>, XName) AncestorsAndSelf(IEnumerable<XElement>, XName) AncestorsAndSelf(IEnumerable<XElement>, XName)

傳回包含來源集合中每個項目的已篩選項目集合,以及來源集合中每個項目的祖系。Returns a filtered collection of elements that contains every element in the source collection, and the ancestors of every element in the source collection. 集合中只會包含具有相符之 XName 的項目。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)

參數

source
IEnumerable<XElement>

IEnumerable<T>XElement,其中包含來源集合。An IEnumerable<T> of XElement that contains the source collection.

name
XName XName XName XName

要比對的 XNameThe XName to match.

傳回

IEnumerable<T>XElement,包含來源集合中的每個項目,以及來源集合中每個項目的祖系。An IEnumerable<T> of XElement that contains every element in the source collection, and the ancestors of every element in the source collection. 集合中只會包含具有相符之 XName 的項目。Only elements that have a matching XName are included in the collection.

範例

下列範例會擷取很棒的孫代項目的集合。The following example retrieves a collection of the great grandchildren elements. 然後會使用此座標軸方法來擷取所有自我以及集合中所有符合指定的項目上階XNameIt 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  

這個範例會產生下列輸出:This example produces the following output:

Great Grand Children Elements  
----  
GreatGrandChild1  
GreatGrandChild2  

Ancestors and Self  
----  
GreatGrandChild1  

以下是相同的範例,但在此情況下的 XML 位於命名空間。The following is the same example, but in this case the XML is in a namespace. 如需詳細資訊,請參閱 < 處理 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  

這個範例會產生下列輸出: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  

備註

如果來源集合中的多個節點有相同的上階,搭配相對應的XName,上階會多次包含在結果集合。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.

這個方法會使用延後的執行。This method uses deferred execution.

另請參閱

適用於