我如何使用XElement计算组合元素值的总和

时间:2018-09-17 14:58:17

标签: c# xml linq-to-xml

我有一个XElement片段,其中包含数千个条目。我需要能够计算每个唯一ID元素的数量元素的组合值

因此,举例来说,我有数百个维修程序的耗材(用品),每个耗材都有唯一的ID(请参阅下文)。如果我的XElement片段使用了很多消耗品,则ID可能会被调用50次,并且在qty元素中其值可能大于1。 我需要遍历我的XElement片段,计算每个ID的qty元素的值的总和。

<supplies>
     <supply>
        <id>104</id>
        <qty>1</qty>
     </supply>
     <supply>
        <id>27</id>
        <qty>1</qty>
     </supply>
     <supply>
        <id>104</id>
        <qty>5</qty>
     </supply>
     <supply>
        <id>104</id>
        <qty>10</qty>
     </supply>
     <supply>
        <id>16</id>
        <qty>2</qty>
     </supply>
</supplies>

在此示例中,我需要将供应ID 104的所有数量元素的值(在此示例中为16)加起来,然后为所有供应ID 27的值(其为1)加和ID 16相同。 (这是2)。我需要对数百个唯一ID进行此操作。

我不介意如何将它们的总和呈现给我,可以通过在每个ID中添加一个元素(如有必要)而定,也许称为“总计”。

请问如何实现这一目标?

1 个答案:

答案 0 :(得分:0)

您可以使用xml linq和字典来获得所需的结果

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);

            Dictionary<int, int> dict = doc.Descendants("supply")
                .GroupBy(x => (int)x.Element("id"), y => (int)y.Element("qty"))
                .ToDictionary(x => x.Key, y => y.Sum());
        }
    }
}