我有一个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中添加一个元素(如有必要)而定,也许称为“总计”。
请问如何实现这一目标?
答案 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());
}
}
}