Come posso risolvere l'errore & # 8220; L'espressione deve valutare un set di nodi & # 8221; quando si verifica l'esistenza di un nodo?

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

  •  03-07-2019
  •  | 
  •  

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.

È stato utile?

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!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top