XContainer.Descendants Method (XName)
Returns a filtered collection of the descendant elements for this document or element, in document order. Only elements that have a matching XName are included in the collection.
Assembly: System.Xml.Linq (in System.Xml.Linq.dll)
Parameters
- name
- Type: System.Xml.Linq.XName
The XName to match.
Return Value
Type: System.Collections.Generic.IEnumerable<XElement>An IEnumerable<T> of XElement containing the descendant elements of the XContainer that match the specified XName.
The following example prints all descendants of an element.
// Attributes are not nodes, so will not be returned by DescendantNodes. XElement xmlTree = new XElement("Root", new XAttribute("Att1", "AttributeContent"), new XElement("Child", new XText("Some text"), new XElement("GrandChild", "element content") ) ); IEnumerable<XElement> de = from el in xmlTree.Descendants("Child") select el; foreach (XElement el in de) Console.WriteLine(el.Name);
This example produces the following output:
Child
The following is the same example, but in this case the XML is in a namespace. For more information, see Working with XML Namespaces.
// Attributes are not nodes, so will not be returned by DescendantNodes. XNamespace aw = "http://www.adventure-works.com"; XElement xmlTree = new XElement(aw + "Root", new XAttribute(aw + "Att1", "AttributeContent"), new XElement(aw + "Child", new XText("Some text"), new XElement(aw + "GrandChild", "element content") ) ); IEnumerable<XElement> de = from el in xmlTree.Descendants(aw + "Child") select el; foreach (XElement el in de) Console.WriteLine(el.Name);
This example produces the following output:
{http://www.adventure-works.com}Child
Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
XNamespace ns = "http://example.org";
var elements = xml.Descendants(ns + "element");
- 2/3/2012
- wensveen
When you use a proper XML file with namespaces with this API, you will never return anything with Descendents("ElementName") because it needs a fully-qualified name.
The format {namespace}localName is used for a fully-qualified XName.
- 10/27/2010
- LukePuplett
- 11/1/2010
- LukePuplett
Conversely, you might be tempted to cache the default namespace and append it onto your element names, but be warned that the .GetDefaultNamespace() method returns the string without the {outer braces} required to be immediately re-used in the API.
A useful extension method for all this is:
public static XName XNameFor(this XElement element, string elementName)
{
return String.Concat("{", element.GetDefaultNamespace(), "}", elementName);
}
- 10/27/2010
- LukePuplett
- 10/27/2010
- LukePuplett