我有个问题
我的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>
Run Code Online (Sandbox Code Playgroud)
我如何解析这个XML文件
我编码的方式,但我得到一个解析错误信息;
if (tip == DövizKuruTipi2.Al??)
Line 44: return Decimal.Parse(doc.SelectNodes("//ALTINKAYNAK/DOVIZ/ADI=" + dovizKuru2 + "/ALIS")[0].InnerText.Replace('.', ','));
Run Code Online (Sandbox Code Playgroud)
表达式必须求值为节点集
Stu*_*tLC 17
错误原因
根据错误消息,.SelectNodes()要求xpath字符串参数求值为一个节点集,例如,此xpath将返回XmlNodeList包含3个节点:
var nodeSet = document.SelectNodes("/altinkaynak/DOVIZ");
Run Code Online (Sandbox Code Playgroud)
提供一个xpath返回单个节点也是可以接受的 - 返回的XmlNodeList只有一个节点:
var nodeSet = document.SelectNodes("(/altinkaynak/DOVIZ)[1]");
Run Code Online (Sandbox Code Playgroud)
但是,无法返回非节点值,例如标量表达式:
var nodeSet = document.SelectNodes("count(/altinkaynak/DOVIZ)");
Run Code Online (Sandbox Code Playgroud)
错误:表达式必须求值为节点集.
相反XmlDocument,您需要创建导航器,编译表达式并对其进行评估:
var navigator = document.CreateNavigator();
var expr = navigator.Compile("count(/altinkaynak/DOVIZ)");
var count = navigator.Evaluate(expr); // 3 (nodes)
Run Code Online (Sandbox Code Playgroud)
如果将Xml解析堆栈从使用转换XmlDocument为a Linq to Xml XDocument,则有一种更简洁的方法来评估标量表达式:
var count = xele.XPathEvaluate("count(/altinkaynak/DOVIZ)");
Run Code Online (Sandbox Code Playgroud)
形成错误的Xpath
Expression must evaluate to a node-set对于xpath完全无效的s,也经常返回相同的error()
var nodeSet = document.SelectNodes("{Insert some really badly formed xpath here!}");
Run Code Online (Sandbox Code Playgroud)
错误:表达式必须求值为节点集.
OP的问题
您的Xpath中有错误.你可能想要的是这个:
doc.SelectNodes("//ALTINKAYNAK/DOVIZ[ADI='" + dovizKuru2 + "']/ALIS") // ...
Run Code Online (Sandbox Code Playgroud)
这将返回具有值为的子元素的ALIS子DOVIZ元素(可能是货币的变量,如)ADIdovizKuru2USD
| 归档时间: |
|
| 查看次数: |
39259 次 |
| 最近记录: |