gpt4 book ai didi

c# - "Expression must evaluate to a node-set."

转载 作者:数据小太阳 更新时间:2023-10-29 01:44:19 25 4
gpt4 key购买 nike

我有一个问题

我的 XML 文件在这里:

<altinkaynak>

<DOVIZ>
<ADI>Tarih</ADI>
<ALIS>24.07.2013 18:59:45</ALIS>
<SATIS/>
</DOVIZ>
<DOVIZ>
<ADI>USD</ADI>
<ALIS>1.9120</ALIS>
<SATIS>1.9220</SATIS>
</DOVIZ>
<DOVIZ>
<ADI>EUR</ADI>
<ALIS>2.5280</ALIS>
<SATIS>2.5430</SATIS>
</DOVIZ>
</altinkaynak>

我如何解析这个 XML 文件

我是这样编码的,但我收到了一条解析错误消息;

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

Expression must evaluate to a node-set

最佳答案

错误原因

根据错误消息,.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)");

Error: Expression must evaluate to a node-set.

对于 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,则有一个 much more concise way计算标量表达式:

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!}");

Error: Expression must evaluate to a node-set.

OP 的问题

您的 Xpath 有错误。您可能想要的是:

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

这将返回 DOVIZ 元素的 ALIS 子元素,该元素有一个 ADI 子元素,值为 dovizKuru2(大概是货币的变量,例如 USD)

关于c# - "Expression must evaluate to a node-set.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17839989/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com