【问题标题】:c# How do I count the total of combined element values using XElementc#如何使用XElement计算组合元素值的总数
【发布时间】:2018-09-17 14:58:17
【问题描述】:

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

例如,我有数百个用于维修程序的消耗品(用品),每个都有一个唯一的 ID(见下文)。如果 ID 是经常使用的消耗品,它可能会在我的 XElement 片段中被调用 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)的所有 qty 元素的值相加,然后将所有供应 ID 27(即 1)的值和供应 ID 16 的值相加(这是2)。我需要为数百个唯一 ID 执行此操作。

我不介意它们每个人的总和是如何呈现给我的,如果需要的话,可以通过向每个 ID 添加一个元素,可能称为“总计”。

您知道如何实现吗?

【问题讨论】:

  • 使用 LINQ to XML。 Stack Overflow 不是代码编写服务——你尝试过什么?
  • 感谢您的有用评论。我猜到 linq to XML 因此是标签。只是在寻找一个指针。不过不用担心。
  • 如果你不熟悉LINQ,为此你需要使用group ... by

标签: c# xml linq-to-xml


【解决方案1】:

您可以使用 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());
        }
    }
}

【讨论】:

  • 非常感谢。很有帮助。
猜你喜欢
  • 2021-06-05
  • 1970-01-01
  • 1970-01-01
  • 2012-05-08
  • 1970-01-01
  • 2020-09-17
  • 2016-09-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多