Extensions.Ancestors 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
소스 컬렉션에 있는 모든 노드의 상위 항목이 들어 있는 요소 컬렉션을 반환합니다.
오버로드
Ancestors<T>(IEnumerable<T>) |
소스 컬렉션에 있는 모든 노드의 상위 항목이 들어 있는 요소 컬렉션을 반환합니다. |
Ancestors<T>(IEnumerable<T>, XName) |
소스 컬렉션에 있는 모든 노드의 상위 항목이 들어 있는 필터링된 요소 컬렉션을 반환합니다. 일치하는 XName이 있는 요소만 컬렉션에 포함됩니다. |
설명
원본 컬렉션의 여러 노드에 동일한 상위 항목이 있는 경우 상위 항목이 결과 컬렉션에 여러 번 포함됩니다. 이를 방지하려면 메서드를 Distinct 사용합니다.
이 메서드는 지연된 실행을 사용합니다.
Ancestors<T>(IEnumerable<T>)
소스 컬렉션에 있는 모든 노드의 상위 항목이 들어 있는 요소 컬렉션을 반환합니다.
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;
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
의 개체 형식입니다.
매개 변수
- source
- IEnumerable<T>
소스 컬렉션이 들어 있는 IEnumerable<T>의 XNode입니다.
반환
소스 컬렉션에 있는 모든 노드의 상위 항목이 들어 있는 IEnumerable<T>의 XElement입니다.
예제
다음 예제에서는 증손자 요소의 컬렉션을 검색합니다. 그런 다음 이 축 메서드를 사용하여 컬렉션에 있는 모든 요소의 모든 상위 요소를 검색합니다.
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
이 예제는 다음과 같은 출력을 생성합니다.
Great Grand Children Elements
----
GreatGrandChild1
GreatGrandChild2
Ancestors
----
GrandChild1
Child1
Root
GrandChild2
Child2
다음은 동일한 예제이지만 이 경우 XML은 네임스페이스에 있습니다. 자세한 내용은 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.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
이 예제는 다음과 같은 출력을 생성합니다.
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
설명
원본 컬렉션의 여러 노드에 동일한 상위 항목이 있는 경우 상위 항목이 결과 컬렉션에 여러 번 포함됩니다. 이를 방지하려면 메서드를 Distinct 사용합니다.
이 메서드는 지연된 실행을 사용합니다.
추가 정보
적용 대상
Ancestors<T>(IEnumerable<T>, XName)
소스 컬렉션에 있는 모든 노드의 상위 항목이 들어 있는 필터링된 요소 컬렉션을 반환합니다. 일치하는 XName이 있는 요소만 컬렉션에 포함됩니다.
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;
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
의 개체 형식입니다.
매개 변수
- source
- IEnumerable<T>
소스 컬렉션이 들어 있는 IEnumerable<T>의 XNode입니다.
반환
소스 컬렉션에 있는 모든 노드의 상위 항목이 들어 있는 IEnumerable<T>의 XElement입니다. 일치하는 XName이 있는 요소만 컬렉션에 포함됩니다.
예제
다음 예제에서는 증손자 요소의 컬렉션을 검색합니다. 그런 다음 이 축 메서드를 사용하여 컬렉션에서 지정된 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
이 예제는 다음과 같은 출력을 생성합니다.
Great Grand Children Elements
----
GreatGrandChild1
GreatGrandChild2
Ancestors
----
Child1
다음은 동일한 예제이지만 이 경우 XML은 네임스페이스에 있습니다. 자세한 내용은 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.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
이 예제는 다음과 같은 출력을 생성합니다.
Great Grand Children Elements
----
{http://www.adventure-works.com}GreatGrandChild1
{http://www.adventure-works.com}GreatGrandChild2
Ancestors
----
{http://www.adventure-works.com}Child1
설명
원본 컬렉션의 여러 노드에 일치하는 XName상위 항목이 동일한 경우 상위 항목이 결과 컬렉션에 여러 번 포함됩니다.
이 메서드는 지연된 실행을 사용합니다.