"Expression must evaluate to a node-set."
"Expression must evaluate to a node-set."
我有一个问题
这是我的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('.', ','));
表达式必须被解析为一个节点集
admin 更改状态以发布 2023年5月23日
错误原因
根据错误信息,.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
被返回
var nodeSet = document.SelectNodes("{Insert some really badly formed xpath here!}");
错误: 表达式必须求值为一个节点集。
OP 的问题
你的 Xpath 存在错误。你可能想要的是这个:
doc.SelectNodes("//ALTINKAYNAK/DOVIZ[ADI='" + dovizKuru2 + "']/ALIS") // ...
它将返回具有值为 dovizKuru2
(这可能是一种货币变量,如 USD
) 的 ADI
子元素的 DOVIZ
元素的 ALIS
子元素。