2013-06-12 93 views
2

我有一个XML文件,这样从名称不同的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

发生这种情况的原因是,XPath表达式必须计算为节点集。
使用Evaluate方法代替:

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

事实上,编辑,感谢指针(仍然没有工作,虽然)。 –

+1

@ G.Abitbol,我已经更新了我的答案。 –

+0

基里尔,现在我想到了,我收到了这个错误信息,尽管它非常简单,但我没有想到在我的导航器上使用其他方法......现在它像一个魅力。非常感谢。 –