Wie kann ich den Fehler beheben "- Ausdrucks muss ein node-set" bei der überprüfung auf die Existenz eines Knotens?
Frage
Ich bin versucht, um zu überprüfen das Vorhandensein eines Knoten mit den folgenden .NET-code:
xmlDocument.SelectSingleNode(
String.Format("//ErrorTable/ProjectName/text()='{0}'", projectName));
Dies wirft immer:
XPathException:Ausdrucks muss ein node-set.
Warum erhalte ich diesen Fehler und wie kann ich es beheben?Danke.
Lösung
Der Ausdruck gegeben zu einem booleschen Wert ausgewertet, nicht in einem Knoten-set.Ich nehme an, Sie möchten prüfen, ob der Projektname gleich die parametrisierten text.In diesem Fall müssen Sie schreiben
//ErrorTable/ProjectName[text()='{0}']
Dies gibt Ihnen eine Liste aller Knoten (nodeset) passend zu den gegebenen Zustand.Diese Liste kann auch leer sein, in diesem Fall die C#-Ausdruck in Ihrem Beispiel wird null zurückgegeben.
Wie ein nachträglicher Einfall:Sie können verwenden Sie die ursprüngliche xpath-Ausdruck, aber nicht mit SelectSingleNode, aber mit Bewerten, wie diese:
(bool)xmlDocument.CreateNavigator().Evaluate(String.Format("//ErrorTable/ProjectName/text()='{0}'", projectName));
Andere Tipps
Versuchen:
Node node = xmlDocument.SelectSingleNode(String.Format("//ErrorTable/ProjectName = '{0}'", projectName));
if (node != null) {
// and so on
}
Edit: dumme Fehler
Der XPath-Ausdruck enthielt einen subtilen Fehler. Es hätte sein sollen:
xmlDocument.SelectSingleNode(String.Format("//ErrorTable/ProjectName[text()='{0}']", projectName));
Der vorherige Ausdruck in einen boolean wurde die Bewertung, die die Ausnahmefehler erklärt. Danke für die Hilfe!