Extensions.AncestorsAndSelf Метод

Определение

Возвращает коллекцию элементов, содержащих каждый элемент в исходной коллекции, и предки каждого элемента в исходной коллекции.

Перегрузки

Имя Описание
AncestorsAndSelf(IEnumerable<XElement>)

Возвращает коллекцию элементов, содержащих каждый элемент в исходной коллекции, и предки каждого элемента в исходной коллекции.

AncestorsAndSelf(IEnumerable<XElement>, XName)

Возвращает отфильтрованную коллекцию элементов, содержащих каждый элемент в исходной коллекции, и предки каждого элемента в исходной коллекции. В коллекцию включены только элементы с соответствующими XName.

Комментарии

Если несколько узлов в исходной коллекции имеют одного предка, предок будет включаться несколько раз в коллекцию результатов. Чтобы избежать этого, используйте Distinct метод.

Этот метод использует отложенное выполнение.

AncestorsAndSelf(IEnumerable<XElement>)

Исходный код:
Extensions.cs
Исходный код:
Extensions.cs
Исходный код:
Extensions.cs
Исходный код:
Extensions.cs
Исходный код:
Extensions.cs

Возвращает коллекцию элементов, содержащих каждый элемент в исходной коллекции, и предки каждого элемента в исходной коллекции.

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)

Параметры

source
IEnumerable<XElement>

IEnumerable<T> ОбъектXElement, содержащий исходную коллекцию.

Возвращаемое значение

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.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

В примере получается следующий вывод.

Great Grand Children Elements
----
GreatGrandChild1
GreatGrandChild2

Ancestors and Self
----
GreatGrandChild1
GrandChild1
Child1
Root
GreatGrandChild2
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.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

В примере получается следующий вывод.

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

Комментарии

Если несколько узлов в исходной коллекции имеют одного предка, предок будет включаться несколько раз в коллекцию результатов. Чтобы избежать этого, используйте Distinct метод.

Этот метод использует отложенное выполнение.

См. также раздел

Применяется к

AncestorsAndSelf(IEnumerable<XElement>, XName)

Исходный код:
Extensions.cs
Исходный код:
Extensions.cs
Исходный код:
Extensions.cs
Исходный код:
Extensions.cs
Исходный код:
Extensions.cs

Возвращает отфильтрованную коллекцию элементов, содержащих каждый элемент в исходной коллекции, и предки каждого элемента в исходной коллекции. В коллекцию включены только элементы с соответствующими 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)

Параметры

source
IEnumerable<XElement>

IEnumerable<T> ОбъектXElement, содержащий исходную коллекцию.

name
XName

Совпадение XName .

Возвращаемое значение

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.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

В примере получается следующий вывод.

Great Grand Children Elements
----
GreatGrandChild1
GreatGrandChild2

Ancestors and Self
----
GreatGrandChild1

Ниже приведен тот же пример, но в этом случае 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.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

В примере получается следующий вывод.

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, предок будет включен несколько раз в коллекцию результатов.

Этот метод использует отложенное выполнение.

См. также раздел

Применяется к