Extensions.AncestorsAndSelf Method (IEnumerable<XElement>, XName)
[ This article is for Windows Phone 8 developers. If you’re developing for Windows 10, see the latest documentation. ]
Returns a filtered collection of elements that contains every element in the source collection, and the ancestors of every element in the source collection. Only elements that have a matching XName are included in the collection.
Assembly: System.Xml.Linq (in System.Xml.Linq.dll)
public static IEnumerable<XElement> AncestorsAndSelf( this IEnumerable<XElement> source, XName name )
Parameters
- source
- Type: System.Collections.Generic.IEnumerable<XElement>
An IEnumerable<T> of XElement 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 every element in the source collection, and the ancestors of every element 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<XElement>. 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 self and 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.AncestorsAndSelf("GreatGrandChild1") select el; output.Append("" + Environment.NewLine); output.Append("Ancestors and Self" + Environment.NewLine); output.Append("----" + Environment.NewLine); foreach (XElement de in allAncestors) output.Append(de.Name + Environment.NewLine); OutputTextBlock.Text = output.ToString();