Extensions.Ancestors Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает коллекцию элементов, содержащих предки каждого узла в исходной коллекции.
Перегрузки
| Имя | Описание |
|---|---|
| Ancestors<T>(IEnumerable<T>) |
Возвращает коллекцию элементов, содержащих предки каждого узла в исходной коллекции. |
| Ancestors<T>(IEnumerable<T>, XName) |
Возвращает отфильтрованную коллекцию элементов, содержащих предки каждого узла в исходной коллекции. В коллекцию включены только элементы с соответствующими XName. |
Комментарии
Если несколько узлов в исходной коллекции имеют одного предка, предок будет включаться несколько раз в коллекцию результатов. Чтобы избежать этого, используйте Distinct метод.
Этот метод использует отложенное выполнение.
Ancestors<T>(IEnumerable<T>)
- Исходный код:
- Extensions.cs
- Исходный код:
- Extensions.cs
- Исходный код:
- Extensions.cs
- Исходный код:
- Extensions.cs
- Исходный код:
- Extensions.cs
Возвращает коллекцию элементов, содержащих предки каждого узла в исходной коллекции.
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
Тип объектов в source, ограниченный XNode.
Параметры
- 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()
- AncestorsAndSelf()
- AncestorsAndSelf
- Descendants
- Nodes<T>(IEnumerable<T>)
- Обзор LINQ to XML
Применяется к
Ancestors<T>(IEnumerable<T>, XName)
- Исходный код:
- Extensions.cs
- Исходный код:
- Extensions.cs
- Исходный код:
- Extensions.cs
- Исходный код:
- Extensions.cs
- Исходный код:
- Extensions.cs
Возвращает отфильтрованную коллекцию элементов, содержащих предки каждого узла в исходной коллекции. В коллекцию включены только элементы с соответствующими 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
Тип объектов в source, ограниченный XNode.
Параметры
- 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, предок будет включен несколько раз в коллекцию результатов.
Этот метод использует отложенное выполнение.
См. также раздел
- Ancestors()
- AncestorsAndSelf()
- AncestorsAndSelf
- Descendants
- Nodes<T>(IEnumerable<T>)
- Обзор LINQ to XML