2008-10-01 7 views
12

Ich versuche, für die Existenz eines Knotens Code mit dem folgenden .NET zu überprüfen:Wie behebe ich den Fehler "Ausdruck muss zu einem Node-Set ausgewertet werden" beim Überprüfen auf die Existenz eines Knotens?

xmlDocument.SelectSingleNode(
     String.Format("//ErrorTable/ProjectName/text()='{0}'", projectName)); 

Dies wirft immer:

XPathException: Expression zu einem Knotenmenge auswerten müssen.

Warum erhalte ich diesen Fehler und wie kann ich ihn beheben? Vielen Dank.

Antwort

19

Der angegebene Ausdruck ergibt einen booleschen Wert, keinen Knotensatz. Ich nehme an, Sie möchten überprüfen, ob der ProjectName dem parametrisierten Text entspricht. In diesem Fall müssen Sie

//ErrorTable/ProjectName[text()='{0}'] 

Dies gibt Ihnen eine Liste aller Knoten (a nodeset) Anpassen des gegebenen Zustand schreiben. Diese Liste kann leer sein. In diesem Fall gibt der C# -Ausdruck in Ihrem Beispiel null zurück.

Als nachträglicher Einfall: Sie können die Original XPath-Ausdruck, aber nicht mit SelectSingleNode, aber mit Werten Sie, wie folgt aus:

(bool)xmlDocument.CreateNavigator().Evaluate(String.Format("//ErrorTable/ProjectName/text()='{0}'", projectName)); 
1

Versuchen:

Node node = xmlDocument.SelectSingleNode(String.Format("//ErrorTable/ProjectName = '{0}'", projectName)); 

if (node != null) { 
    // and so on 
} 

Edit: dumme Fehler

1

Der XPath-Ausdruck enthielt einen subtilen Fehler. Es hätte sein sollen:

Der vorherige Ausdruck wurde auf einen booleschen Wert ausgewertet, der den Ausnahmefehler erklärt. Danke für die Hilfe!

+0

Haben Sie mit Hilfe meiner Links zu diesem Schluss kam oben zitierten ? – Mephisztoe

+0

Einer Ihrer Links hatte die eckige Klammernnotation, an die ich nicht gedacht hatte. –

Verwandte Themen