Grund für den Fehler
Gemäss der Fehlermeldung, erfordert, dass die .SelectNodes()
xpath
String-Parameter auf einen Knotensatz auswertet, z.B. Diese XPath wird eine XmlNodeList
mit 3 Knoten zurückgeben:
var nodeSet = document.SelectNodes("/altinkaynak/DOVIZ");
eine xpath
liefert, die einen einzelnen Knoten zurückgibt, ist auch akzeptabel, - das zurück XmlNodeList
wird nur einen einzigen Knoten haben:
var nodeSet = document.SelectNodes("(/altinkaynak/DOVIZ)[1]");
Es ist jedoch nicht möglich, nicht-Knotenwerte, wie skalare Ausdrücke zurück:
var nodeSet = document.SelectNodes("count(/altinkaynak/DOVIZ)");
Error: Expression must evaluate to a node-set.
Statt für XmlDocument
, müssten Sie einen Navigator erstellen, um einen Ausdruck kompilieren, und auswerten:
var navigator = document.CreateNavigator();
var expr = navigator.Compile("count(/altinkaynak/DOVIZ)");
var count = navigator.Evaluate(expr); // 3 (nodes)
Wenn Sie Ihre XML-Switch-Stack Parsen verwenden XmlDocument
zu einem Linq to Xml
XDocument
gibt es eine much more concise way zu bewerten skalare Ausdrücke:
var count = xele.XPathEvaluate("count(/altinkaynak/DOVIZ)");
Badly Xpath gebildet
Derselbe Fehler (Expression must evaluate to a node-set
) wird auch häufig für xpath
s zurück, die
var nodeSet = document.SelectNodes("{Insert some really badly formed xpath here!}");
Error: Expression must evaluate to a node-set.
OPs Frage
Sie völlig ungültig sind, haben einen Fehler in Ihrer XPath. Was Sie wahrscheinlich wollen, ist dies:
doc.SelectNodes("//ALTINKAYNAK/DOVIZ[ADI='" + dovizKuru2 + "']/ALIS") // ...
, die das ALIS
Kind des DOVIZ
Elements zurück, das ein ADI
Kind mit einem Wert von dovizKuru2
hat (die vermutlich eine Variable für Währung ist wie USD
)
es funktioniert. Danke. – ofince
Eigentlich ist 'Some/Really = schlecht [@ formed = 'xpath']' syntaktisch gültig und gibt einen booleschen Wert zurück. Wenn Sie es durch 'A/B = C [@ X = 3]' ersetzen, können Sie sehen, dass es vollkommen sinnvoll ist. –
Danke @MichaelKay - habe aktualisiert – StuartLC