J'utilise une chaîne d'appels à la méthode XElement.Element()
de forer vers le bas dans un document XML et tirer la valeur d'un attribut:Éviter l'exposition à NullReferenceException lorsque vous utilisez LINQ pour XML
XElement root = ...;
XNamespace ns = "...";
var firstName =
root
.Element(ns + "Employee")
.Element(ns + "Identity")
.Element(ns + "Name")
.Attribute(ns + "FirstName");
Cependant, depuis la le document entrant n'a pas été validé par le schéma, il est possible qu'un document malformé provoque un NullReferenceException
si l'un des éléments intermédiaires attendus n'existe pas.
Existe-t-il un moyen d'éviter ce risque, tout en gardant le code succinct?
Je peux envelopper le code ci-dessus dans un gestionnaire pour NullReferenceException
mais cela ne semble pas correct et n'indiquerait pas non plus spécifiquement où la panne s'est produite. La construction d'un message d'erreur informatif serait manuelle, fastidieuse, sujette aux erreurs et risque de maintenance. Au lieu de cela, est-ce que je devrais utiliser XPath à la place, de cette façon je peux vérifier un retour null, puis construire facilement un message d'erreur indiquant que l'expression XPath n'a pas pu être résolue?
Juste pour assurez-vous, pourquoi le document entrant n'est-il pas validé? – Neowizard
Pouvez-vous utiliser simplement Descendents (ns + "FirstName")? –