从不同名称的xml节点中获取相同属性的总和

时间:2013-06-12 21:10:25

标签: c# .net xml xpath xpathdocument

我有一个xml文件

<root>
<segmentNameA attributeName="10" />
<segmentNameB attributeName="50" />
</root>

这是我的代码:

XPathDocument xPathDocument = new XPathDocument(analysisFileToProcess);
XPathNavigator  Navigator = xPathDocument.CreateNavigator();

我想得到所有attributeName属性(10 + 50)的总和。

这就是我做的事情

var sum /*want to obtain 60*/ = Navigator.Select(Navigator.Compile("sum(/root/*[self::segmentNameA or self::segmentNameB]/@attributeName)"));

我得到一个表达“有一个无效的令牌”。

但是,当我这样做时

var nodes = Navigator.Select(Navigator.Compile("/root/*[self::segmentNameA or self::segmentNameB]"));

我得到了包含我想要总结的属性的所有节点。

当我这样做时

var nodes = Navigator.Select(Navigator.Compile("/root/*[self::segmentNameA or self::segmentNameB]/@attributeName"));

我得到了属性列表。为什么我不能在此使用sum函数?

有人可以指出我的错误吗?

1 个答案:

答案 0 :(得分:1)

会发生这种情况,因为XPath表达式必须求值为节点集 改为使用Evaluate方法:

var sum = (double)Navigator.Evaluate("sum(/root/*[self::segmentNameA or self::segmentNameB]/@attributeName)");