Comment résoudre l'erreur «L'expression doit évaluer un ensemble de nœuds» lors de la vérification de l'existence d'un nœud?
Question
J'essaie de vérifier l'existence d'un nœud à l'aide du code .NET suivant:
xmlDocument.SelectSingleNode(
String.Format("//ErrorTable/ProjectName/text()='{0}'", projectName));
Cela soulève toujours:
XPathException: l'expression doit avoir pour résultat un ensemble de nœuds.
Pourquoi cette erreur me parvient-elle et comment puis-je la résoudre? Merci.
La solution
L'expression donnée est évaluée à un booléen et non à un ensemble de nœuds. Je suppose que vous voulez vérifier si le ProjectName est égal au texte paramétré. Dans ce cas, vous devez écrire
//ErrorTable/ProjectName[text()='{0}']
Ceci vous donne une liste de tous les noeuds (un ensemble de noeuds) correspondant à la condition donnée. Cette liste peut être vide. Dans ce cas, l'expression C # de votre exemple renverra null.
Après coup: vous pouvez utiliser l'expression xpath d'origine, mais pas avec SelectSingleNode, mais avec Evaluate, comme ceci:
(bool)xmlDocument.CreateNavigator().Evaluate(String.Format("//ErrorTable/ProjectName/text()='{0}'", projectName));
Autres conseils
Essayez:
Node node = xmlDocument.SelectSingleNode(String.Format("//ErrorTable/ProjectName = '{0}'", projectName));
if (node != null) {
// and so on
}
Modifier: erreur stupide
L'expression XPath contenait une erreur subtile. Cela aurait dû être:
xmlDocument.SelectSingleNode(String.Format("//ErrorTable/ProjectName[text()='{0}']", projectName));
L'expression précédente évaluait un booléen, ce qui explique l'erreur d'exception. Merci pour l'aide!