C# &引用;表达式必须计算为节点集;
我有个问题 我的XML文件在这里:C# &引用;表达式必须计算为节点集;,c#,xml,xpath,C#,Xml,Xpath,我有个问题 我的XML文件在这里: <altinkaynak> <DOVIZ> <ADI>Tarih</ADI> <ALIS>24.07.2013 18:59:45</ALIS> <SATIS/> </DOVIZ> <DOVIZ> <ADI>USD</ADI> <ALIS>1.91
<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>
表达式必须计算为节点集
错误原因 根据错误消息,
.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)");
var count = xele.XPathEvaluate("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 to Xml
XDocument
,则需要计算标量表达式:
var nodeSet = document.SelectNodes("count(/altinkaynak/DOVIZ)");
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
子元素,该元素的ADI
子元素的值为dovizKuru2
(这可能是货币的变量,如USD
)由于Xpath表达式无效,我收到了此错误。我用==
来表示相等,而不是单个=
。我的表达式是[SomeNode=='SomeValue']
,但应该是[SomeNode='SomeValue']
我之所以得到这个表达式,是因为我在Xpath末尾意外地遇到了/
不正确
table.SelectNodes(“.//tr[1]///td[1]//”代码>
正确
table.SelectNodes(“.//tr[1]//td[1]”)
实际上Some/Really=bally[@formed='xpath']
在语法上有效并返回布尔值。如果用A/B=C[@X=3]
替换它,您会发现它非常有意义。