我在文档的根目录下有一个XPathNavigator。几个级别下来,我想要总结一组数值。我总是可以循环遍历节点并自己添加它们,但由于我知道XPath规范包含了sum函数,所以我决定尝试使用它。我遇到了错误。
System.Xml.XPath.XPathException - Expression must evaluate to a node-set.
这是我的代码。
XPathDocument doc = new XPathDocument(new StringReader(myLiteralXML));
XPathNavigator nav = doc.CreateNavigator();
string myXPath = "sum(/root/level1/level2/elementsToAdd)";
XPathNavigator sumNode = nav.SelectSingleNode(myXPath);
我希望sumNode.Value
能够给我(作为一个字符串)。但是当我尝试填充sumNode
时,我得到了上面列出的例外。
我知道我的XPath是有效的(或者至少XMLSpy说它是有效的)。我可以不使用XPath函数 在XPathNavigator上?我只是做错了吗?
(另外,只是好奇,我是在浪费时间在一个没有人使用过的死胡同的方法上,而且冒着一年不能弄清楚这是怎么回事?)
答案 0 :(得分:6)
请改为尝试:
XPathNavigator sumNode = nav.Evaluate(myXPath);
XPathNavigator.Evaluate
方法定义为:
计算指定的XPath表达式并返回键入的结果。
,而不是仅用于返回节点的XPathNavigator.SelectSingleNode
方法。