Получить сумму одного и того же атрибута из узлов с разными именами 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"));

Я получаю список атрибутов. Почему я не могу использовать функцию суммы на этом?

Может кто-нибудь указать мне, что я делаю не так?

1 ответ

Решение

Это происходит потому, что выражение XPath должно соответствовать множеству узлов.
использование Evaluate метод вместо:

var sum = (double)Navigator.Evaluate("sum(/root/*[self::segmentNameA or self::segmentNameB]/@attributeName)");
Другие вопросы по тегам