"Expression must evaluate to a node-set."

4 浏览
0 Comments

"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日
0
0 Comments

我一直得到这个错误是因为我的XPath表达式是无效的。我在等式中使用了 == 而不是单个 = 。我的表达式是[SomeNode == 'SomeValue'],但应该是[SomeNode = 'SomeValue']

0
0 Comments

错误原因

根据错误信息,.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 XmlXDocument,则有一个更简洁的方法来评估标量表达式:

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 子元素。

0