Dernièrement, j'ai utilisé XPathDocument et XNavigator pour analyser un fichier XML pour un XPath et un attribut donné. Cela fonctionne très bien, quand je sais à l'avance ce qu'est le XPath. Cependant, XPath sera l'une des nombreuses valeurs XPath possibles, et j'aimerais pouvoir tester si un XPath existe ou non.Meilleur moyen de tester l'existence de XPath dans un fichier XML?
Dans le cas où je reçois la nomenclature mal, voici ce que j'appelle un XPath - donné cette blob XML:
<foo>
<bar baz="This is the value of the attribute named baz">
</foo>
je pourrais être à la recherche de ce que je vous appelle un XPath «// foo/bar "puis en lisant l'attribut" baz "pour obtenir la valeur.
Exemple de code que j'utiliser pour ce faire:
XPathDocument document = new XPathDocument(filename);
XPathNavigator navigator = document.CreateNavigator();
XPathNavigator node = navigator.SelectSingleNode("//foo/bar");
if(node.HasAttributes)
{
Console.WriteLine(node.GetAttribute("baz", string.Empty));
}
Maintenant, si l'appel à navigator.SelectSingleNode échoue, il retournera un NullReferenceException ou un XPathException. Je peux attraper ces deux et refactor le ci-dessus dans un test pour voir si un XPath donné renvoie une exception, mais je me demandais s'il y avait une meilleure façon?
Je n'ai rien vu d'évident dans l'Intellisense. XPathNavigator a .HasAttributes et .HasChildren mais à court d'itération à travers le chemin un nœud à la fois, je ne vois rien de plus agréable à utiliser.
Qu'est-ce que cela a à voir avec LINQ? XPathNavigator et XPathDocument ne font pas partie de LINQ to XML. –