c# – “表达式必须评估为节点集.”
我有个问题
我的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('.',','));
解决方法
错误原因
根据错误消息,.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到Xml XDocument,则有一个much more concise way来评估标量表达式: var count = xele.XPathEvaluate("count(/altinkaynak/DOVIZ)"); 形成错误的Xpath 对于完全无效的xpath,也经常返回相同的错误(表达式必须计算到节点集) var nodeSet = document.SelectNodes("{Insert some really badly formed xpath here!}");
OP的问题 您的Xpath中有错误.你可能想要的是这个: doc.SelectNodes("//ALTINKAYNAK/DOVIZ[ADI='" + dovizKuru2 + "']/ALIS") // ... 这将返回DOVIZ元素的ALIS子元素,该元素具有值为dovizKuru2的ADI子元素(可能是美元等货币的变量) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |