“表达式的计算结果必须为节点集。”

我有个问题

我的XML文件在这里:

<阿尔廷卡纳克>
<多维兹>
<ADI>塔里赫&lt/ADI>
<ALIS>2013年7月24日18:59:45&lt/ALIS>
<SATIS/>
&lt/多维兹>
<多维兹>
<ADI>美元&lt/ADI>
<ALIS>1.9120&lt/ALIS>
<萨蒂斯>1.9220&lt/萨蒂斯>
&lt/多维兹>
<多维兹>
<ADI>欧元&lt/ADI>
<ALIS>2.5280&lt/ALIS>
<萨蒂斯>2.5430&lt/萨蒂斯>
&lt/多维兹>
&lt/阿尔廷卡纳克>

我如何解析这个XML文件

我用这种方式编码,但得到了一条解析错误消息

if(tip==DövizKuruTipi2.Alış)
第44行:返回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(节点)

如果您将Xml解析堆栈从使用XmlDocument切换到Linq to XmlXDocument有一种更简洁的方法来计算标量表达式:

var count=xele.xpatheevaluate(“count(/altinkaynak/DOVIZ)”);

格式错误的Xpath

同样的错误(表达式必须计算为一个节点集)也经常为完全无效的xpath返回

var nodeSet=document.SelectNodes(“{在这里插入一些格式非常糟糕的xpath!}”);

错误:表达式必须计算为节点集

OP的问题

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

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

它将返回DOVIZ元素的ALIS子元素,该元素有一个ADI子元素,其值为dovizKuru2(这可能是一个货币变量,如USD

发表评论