我有个问题
我的XML文件在这里:
<;阿尔廷卡纳克>;
<;多维兹>;
<;ADI>;塔里赫</ADI>;
<;ALIS>;2013年7月24日18:59:45</ALIS>;
<;SATIS/>;
</多维兹>;
<;多维兹>;
<;ADI>;美元</ADI>;
<;ALIS>;1.9120</ALIS>;
<;萨蒂斯>;1.9220</萨蒂斯>;
</多维兹>;
<;多维兹>;
<;ADI>;欧元</ADI>;
<;ALIS>;2.5280</ALIS>;
<;萨蒂斯>;2.5430</萨蒂斯>;
</多维兹>;
</阿尔廷卡纳克>;
我如何解析这个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)