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