Extensions.AncestorsAndSelf Method (IEnumerable<XElement>)
[ This article is for Windows Phone 8 developers. If you’re developing for Windows 10, see the latest documentation. ]
Returns a collection of elements that contains every element in the source collection, and the ancestors of every element in the source collection.
Assembly: System.Xml.Linq (in System.Xml.Linq.dll)
Parameters
- source
- Type: System.Collections.Generic.IEnumerable<XElement>
An IEnumerable<T> of XElement that contains the source collection.
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.
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, the ancestor will be included multiple times in the result collection. To avoid this, use the Distinct method.
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 and self of all elements in the collection.
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().Distinct() 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();