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

本文关键字:获取 属性 xml 节点 | 更新日期: 2023-09-27 18:18:01

我有一个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"));

我得到属性列表。为什么不能用求和函数呢?

谁能指出我做错了什么?

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

之所以会发生,是因为XPath表达式必须求值为节点集。
使用Evaluate方法代替:

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