Для чего-то подобного мне действительно нравятся методы расширения XML SafeElement и SafeAttribute, поскольку они позволяют запрашивать XML, не беспокоясь о том, чтобы столкнуться с нулевыми значениями, если XML не содержит указанных вами элементов или атрибутов.
Код для этих методов расширения здесь:
public static XElement SafeElement(this XContainer container, string name)
{
return container.Element(name) ?? new XElement(name);
}
public static XAttribute SafeAttribute(this XElement element, string name)
{
return element.Attribute(name) ?? new XAttribute(name, "");
}
Вы используете это так:
var customers = xdoc.Descendants("Customer")
.Where(x => x.SafeAttribute("Location").Value == "NJ")
.Select(x => x.SafeElement("Male").SafeAttribute("Value").Value);
Если по какой-либо причине атрибут Location или элемент Male отсутствует, вы получите пустой набор результатов вместо исключений.