Extensions.Ancestors<T> Method (IEnumerable<T>, XName)
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)
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.| Exception | Condition |
|---|---|
| ArgumentNullException | source is null. |
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.
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.
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();
For a list of the operating systems and browsers that are supported by Silverlight, see Supported Operating Systems and Browsers.