Extensions.Ancestors 메서드

정의

소스 컬렉션에 있는 모든 노드의 상위 항목이 들어 있는 요소 컬렉션을 반환합니다.Returns a collection of elements that contains the ancestors of every node in the source collection.

오버로드

Ancestors<T>(IEnumerable<T>)

소스 컬렉션에 있는 모든 노드의 상위 항목이 들어 있는 요소 컬렉션을 반환합니다.Returns a collection of elements that contains the ancestors of every node in the source collection.

Ancestors<T>(IEnumerable<T>, XName)

소스 컬렉션에 있는 모든 노드의 상위 항목이 들어 있는 필터링된 요소 컬렉션을 반환합니다.Returns a filtered collection of elements that contains the ancestors of every node 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.

Ancestors<T>(IEnumerable<T>)

소스 컬렉션에 있는 모든 노드의 상위 항목이 들어 있는 요소 컬렉션을 반환합니다.Returns a collection of elements that contains the ancestors of every node in the source collection.

public:
generic <typename T>
 where T : System::Xml::Linq::XNode[System::Runtime::CompilerServices::Extension]
 static System::Collections::Generic::IEnumerable<System::Xml::Linq::XElement ^> ^ Ancestors(System::Collections::Generic::IEnumerable<T> ^ source);
public static System.Collections.Generic.IEnumerable<System.Xml.Linq.XElement> Ancestors<T> (this System.Collections.Generic.IEnumerable<T> source) where T : System.Xml.Linq.XNode;
static member Ancestors : seq<'T (requires 'T :> System.Xml.Linq.XNode)> -> seq<System.Xml.Linq.XElement> (requires 'T :> System.Xml.Linq.XNode)
<Extension()>
Public Function Ancestors(Of T As XNode) (source As IEnumerable(Of T)) As IEnumerable(Of XElement)

형식 매개 변수

T

XNode로 제한된 source의 개체 형식입니다.The type of the objects in source, constrained to XNode.

매개 변수

source
IEnumerable<T>

소스 컬렉션이 들어 있는 IEnumerable<T>XNode입니다.An IEnumerable<T> of XNode that contains the source collection.

반환

소스 컬렉션에 있는 모든 노드의 상위 항목이 들어 있는 IEnumerable<T>XElement입니다.An IEnumerable<T> of XElement that contains the ancestors of every node 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 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.Ancestors().Distinct()  
    select el;  
  
Console.WriteLine("");  
Console.WriteLine("Ancestors");  
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.Ancestors.Distinct _  
                   Select el  
  
Console.WriteLine("")  
Console.WriteLine("Ancestors")  
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  
----  
GrandChild1  
Child1  
Root  
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.Ancestors().Distinct()  
    select el;  
  
Console.WriteLine("");  
Console.WriteLine("Ancestors");  
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.Ancestors.Distinct _  
                           Select el  
  
        Console.WriteLine("")  
        Console.WriteLine("Ancestors")  
        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  
----  
{http://www.adventure-works.com}GrandChild1  
{http://www.adventure-works.com}Child1  
{http://www.adventure-works.com}Root  
{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.

추가 정보

Ancestors<T>(IEnumerable<T>, XName)

소스 컬렉션에 있는 모든 노드의 상위 항목이 들어 있는 필터링된 요소 컬렉션을 반환합니다.Returns a filtered collection of elements that contains the ancestors of every node in the source collection. 일치하는 XName이 있는 요소만 컬렉션에 포함됩니다.Only elements that have a matching XName are included in the collection.

public:
generic <typename T>
 where T : System::Xml::Linq::XNode[System::Runtime::CompilerServices::Extension]
 static System::Collections::Generic::IEnumerable<System::Xml::Linq::XElement ^> ^ Ancestors(System::Collections::Generic::IEnumerable<T> ^ source, System::Xml::Linq::XName ^ name);
public static System.Collections.Generic.IEnumerable<System.Xml.Linq.XElement> Ancestors<T> (this System.Collections.Generic.IEnumerable<T> source, System.Xml.Linq.XName name) where T : System.Xml.Linq.XNode;
static member Ancestors : seq<'T (requires 'T :> System.Xml.Linq.XNode)> * System.Xml.Linq.XName -> seq<System.Xml.Linq.XElement> (requires 'T :> System.Xml.Linq.XNode)
<Extension()>
Public Function Ancestors(Of T As XNode) (source As IEnumerable(Of T), name As XName) As IEnumerable(Of XElement)

형식 매개 변수

T

XNode로 제한된 source의 개체 형식입니다.The type of the objects in source, constrained to XNode.

매개 변수

source
IEnumerable<T>

소스 컬렉션이 들어 있는 IEnumerable<T>XNode입니다.An IEnumerable<T> of XNode that contains the source collection.

name
XName

일치시킬 XName입니다.The XName to match.

반환

소스 컬렉션에 있는 모든 노드의 상위 항목이 들어 있는 IEnumerable<T>XElement입니다.An IEnumerable<T> of XElement that contains the ancestors of every node 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. 그런 다음 모든 상위 항목 컬렉션의 지정 된 일치 하는 모든 요소를 검색 하려면이 축 메서드를 사용 XName합니다.It then uses this axis method to retrieve all 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.Ancestors("Child1")  
    select el;  
  
Console.WriteLine("");  
Console.WriteLine("Ancestors");  
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.Ancestors("Child1") _  
                   Select el  
  
Console.WriteLine("")  
Console.WriteLine("Ancestors")  
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  
----  
Child1  

다음은 동일한 예에서 이지만 경우 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.Ancestors(aw + "Child1")  
    select el;  
  
Console.WriteLine("");  
Console.WriteLine("Ancestors");  
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.Ancestors(GetXmlNamespace() + "Child1") _  
                           Select el  
  
        Console.WriteLine("")  
        Console.WriteLine("Ancestors")  
        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  
----  
{http://www.adventure-works.com}Child1  

설명

소스 컬렉션에 있는 여러 노드의 상위 항목이 같은 일치 하는 경우 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.

추가 정보

적용 대상