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?

StackOverflow https://stackoverflow.com/questions/157044

  •  03-07-2019
  •  | 
  •  

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.

Était-ce utile?

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!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top