You can add some extension methods to do this for you. For the Element method, you must return null or the element itself. For the Elements method, you must return an empty result or target elements.
These are extension methods:
public static class XElementExtensions { public static XElement ElementOrDefault(this XElement element, XName name) { if (element == null) return null; return element.Element(name); } public static IEnumerable<XElement> ElementsOrEmpty(this XElement element, XName name) { if (element == null) return Enumerable.Empty<XElement>(); return element.Elements(name); } }
You can use them as follows:
var query = theElement.ElementOrDefault("Blah") .ElementOrDefault("Whatever") .ElementsOrEmpty("Something"); if (query.Any()) // do something else // no elements
If you are not requesting ElementsOrEmpty , but your last request is for ElementOrDefault , you should check for null instead of the Enumerable.Any method.
source share