LINQ: сумма значений узлов XML в C # - PullRequest
2 голосов
/ 11 марта 2010

У меня есть документ XML, и я хотел бы суммировать все элементы с определенным именем. Как мне это сделать?

Ответы [ 2 ]

5 голосов
/ 11 марта 2010

Можно начать со следующего кода, который суммирует значение элементов specificName в любом месте документа (Descendants возвращает коллекцию всех элементов с указанным именем независимо от того, насколько глубоко они вложены):

var doc = XDocument.Load("doc.xml");
var sum = (from nd in doc.Descendants("specificName")
           select Int32.Parse(nd.Value)).Sum();

В качестве альтернативы, если вы не хотите использовать синтаксис запроса, вы можете написать что-то вроде:

var sum = doc.Descendants("specificName").Sum(nd => 
            Int32.Parse(nd.Value));

В примерах предполагается, что значение хранится в виде текста внутри элемента и является целым числом.

1 голос
/ 11 марта 2010

Предположим, это ваш XML:

<nodes>
     <reading c='1'>17</reading>
     <reading c='2'>18</reading>
     <reading c='3'>19</reading>
     <reading c='4'>21</reading>
     <reading c='5'>4</reading>
     <reading c='6'>3</reading>
     <reading c='7'>7</reading>
</nodes>

Затем используйте этот код для суммирования значений элементов reading:

public void Run()
{
    XDocument doc = XDocument.Load(fileToLoad);
    System.Console.WriteLine("\nSumming:");
    var sum = doc.Element("nodes")
                 .Elements("reading")
                 .Sum(n => int.Parse(n.Value));

    Console.WriteLine("  {0}", sum);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...