Come posso risolvere l'errore & # 8220; L'espressione deve valutare un set di nodi & # 8221; quando si verifica l'esistenza di un nodo?
Domanda
Sto tentando di verificare l'esistenza di un nodo usando il seguente codice .NET:
xmlDocument.SelectSingleNode(
String.Format("//ErrorTable/ProjectName/text()='{0}'", projectName));
Questo solleva sempre:
XPathException: l'espressione deve essere valutata in un set di nodi.
Perché visualizzo questo errore e come posso risolverlo? Grazie.
Soluzione
L'espressione fornita restituisce un valore booleano, non un set di nodi. Presumo che tu voglia verificare se ProjectName è uguale al testo parametrizzato. In questo caso devi scrivere
//ErrorTable/ProjectName[text()='{0}']
Questo ti dà un elenco di tutti i nodi (un set di nodi) che corrispondono alla condizione data. Questo elenco potrebbe essere vuoto, nel qual caso l'espressione C # nell'esempio restituirà null.
Come ripensamento: puoi utilizzare l'espressione xpath originale, ma non con SelectSingleNode, ma con Valuta, in questo modo:
(bool)xmlDocument.CreateNavigator().Evaluate(String.Format("//ErrorTable/ProjectName/text()='{0}'", projectName));
Altri suggerimenti
Prova:
Node node = xmlDocument.SelectSingleNode(String.Format("//ErrorTable/ProjectName = '{0}'", projectName));
if (node != null) {
// and so on
}
Modifica: errore sciocco
L'espressione XPath conteneva un errore sottile. Avrebbe dovuto essere:
xmlDocument.SelectSingleNode(String.Format("//ErrorTable/ProjectName[text()='{0}']", projectName));
L'espressione precedente stava valutando un valore booleano, il che spiega l'errore di eccezione. Grazie per l'aiuto!