“表达式必须评估为节点集。”

我有个问题

我的XML文件在这里;

  Tarih 24.07.2013 18:59:45    USD 1.9120 1.9220   EUR 2.5280 2.5430   

我如何解析这个XML文件

我编码的方式,但我得到一个解析错误信息;

 if (tip == DövizKuruTipi2.Alış) Line 44: return Decimal.Parse(doc.SelectNodes("//ALTINKAYNAK/DOVIZ/ADI=" + dovizKuru2 + "/ALIS")[0].InnerText.Replace('.', ',')); 

表达式必须评估为节点集

错误原因

根据错误消息, .SelectNodes()要求xpath字符串参数求值为一个节点集,例如,此xpath将返回包含3个节点的XmlNodeList

 var nodeSet = document.SelectNodes("/altinkaynak/DOVIZ"); 

提供返回单个节点的xpath也是可以接受的 – 返回的XmlNodeList只有一个节点:

 var nodeSet = document.SelectNodes("(/altinkaynak/DOVIZ)[1]"); 

但是,无法返回非节点值,例如标量表达式:

 var nodeSet = document.SelectNodes("count(/altinkaynak/DOVIZ)"); 

错误:表达式必须求值为节点集。

相反,对于XmlDocument ,您需要创建导航器,编译表达式并对其进行评估:

  var navigator = document.CreateNavigator(); var expr = navigator.Compile("count(/altinkaynak/DOVIZ)"); var count = navigator.Evaluate(expr); // 3 (nodes) 

如果将Xml解析堆栈从使用XmlDocument切换到Linq to Xml XDocument ,则有一种更简洁的方法来评估标量表达式:

 var count = xele.XPathEvaluate("count(/altinkaynak/DOVIZ)"); 

形成错误的Xpath

同样的错误( Expression must evaluate to a node-set )也经常为xpath s返回,它们完全无效

  var nodeSet = document.SelectNodes("{Insert some really badly formed xpath here!}"); 

错误:表达式必须求值为节点集。

OP的问题

您的Xpath中有错误。 你可能想要的是这个:

 doc.SelectNodes("//ALTINKAYNAK/DOVIZ[ADI='" + dovizKuru2 + "']/ALIS") // ... 

这将返回DOVIZ元素的ALIS子元素,该元素具有值为dovizKuru2ADI子元素(可能是美元等货币的变量)