Extensions.Ancestors<T> Method (IEnumerable<T>, XName)
Microsoft Silverlight will reach end of support after October 2021. Learn more.
Returns a filtered collection of elements that contains the ancestors of every node in the source collection. Only elements that have a matching XName are included in the collection.
Namespace: System.Xml.Linq
Assembly: System.Xml.Linq (in System.Xml.Linq.dll)
Syntax
'Declaration
<ExtensionAttribute> _
Public Shared Function Ancestors(Of T As XNode) ( _
source As IEnumerable(Of T), _
name As XName _
) As IEnumerable(Of XElement)
public static IEnumerable<XElement> Ancestors<T>(
this IEnumerable<T> source,
XName name
)
where T : XNode
Type Parameters
- T
The type of the objects in source, constrained to XNode.
Parameters
- source
Type: System.Collections.Generic.IEnumerable<T>
An IEnumerable<T> of XNode that contains the source collection.
- name
Type: System.Xml.Linq.XName
The XName to match.
Return Value
Type: System.Collections.Generic.IEnumerable<XElement>
An IEnumerable<T> of XElement that contains the ancestors of every node in the source collection. Only elements that have a matching XName are included in the collection.
Usage Note
In Visual Basic and C#, you can call this method as an instance method on any object of type IEnumerable<T>. When you use instance method syntax to call this method, omit the first parameter.
Exceptions
Exception | Condition |
---|---|
ArgumentNullException | source is nulla null reference (Nothing in Visual Basic). |
Remarks
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.
Examples
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 that match a specified XName.
Dim output As New StringBuilder
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
output.Append("Great Grand Children Elements")
output.Append(Environment.NewLine)
output.Append("----")
output.Append(Environment.NewLine)
For Each de As XElement In greatGrandChildren
output.Append(de.Name)
output.Append(Environment.NewLine)
Next
Dim allAncestors = From el In greatGrandChildren.Ancestors("Child1") _
Select el
output.Append("")
output.Append(Environment.NewLine)
output.Append("Ancestors")
output.Append(Environment.NewLine)
output.Append("----")
output.Append(Environment.NewLine)
For Each de As XElement In allAncestors
output.Append(de.Name)
output.Append(Environment.NewLine)
Next
OutputTextBlock.Text = output.ToString()
StringBuilder output = new StringBuilder();
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;
output.Append("Great Grand Children Elements" + Environment.NewLine);
output.Append("----" + Environment.NewLine);
foreach (XElement de in greatGrandChildren)
output.Append(de.Name + Environment.NewLine);
IEnumerable<XElement> allAncestors =
from el in greatGrandChildren.Ancestors("Child1")
select el;
output.Append("" + Environment.NewLine);
output.Append("Ancestors" + Environment.NewLine);
output.Append("----" + Environment.NewLine);
foreach (XElement de in allAncestors)
output.Append(de.Name + Environment.NewLine);
OutputTextBlock.Text = output.ToString();
Version Information
Silverlight
Supported in: 5, 4, 3
Silverlight for Windows Phone
Supported in: Windows Phone OS 7.1, Windows Phone OS 7.0
XNA Framework
Supported in: Xbox 360, Windows Phone OS 7.0
Platforms
For a list of the operating systems and browsers that are supported by Silverlight, see Supported Operating Systems and Browsers.
See Also