C# 将XML文件中的数据合并到一行中

C# 将XML文件中的数据合并到一行中,c#,C#,我正在开发一个网站,它应该从一个XML文件中提取所有数据,并将其放入一个表中。我现在一切正常,但有几件事我搞不清楚。现在,页面可以很好地提取数据,但我希望每个电子邮件只有一行,如果这样做有意义的话 Example - Name Email Total Points Penny penny@penny.com 300 Penny penny@penny.com 200 与其显示这一点,我只希望用户有一行penny@penn

我正在开发一个网站,它应该从一个XML文件中提取所有数据,并将其放入一个表中。我现在一切正常,但有几件事我搞不清楚。现在,页面可以很好地提取数据,但我希望每个电子邮件只有一行,如果这样做有意义的话

Example - 
Name     Email               Total Points
Penny   penny@penny.com        300
Penny   penny@penny.com        200
与其显示这一点,我只希望用户有一行penny@penny.com,并使其结合总分

我相信一些代码会有所帮助,但我不完全确定哪些代码最有帮助,因为我没有创建获取数据的web服务,只编写了实际页面的一小部分

编辑-

提取电子邮件的代码为-

string t7 = rec.SelectSingleNode("email").InnerText;
放在桌子上的地方-

    chart += "<tr><td>" + t5 + "</td><td>" + t10 + "</td><td>" + t7 + "</td><td>" + t6 + "</td>" + "<td>" + t8 + "</td><td>" + t9 + "</td><td style=\"border-right:0;\">" + totalpoints + "</td></tr>";

这对于LINQ来说相当容易。假设结果中有一个节点列表,则可以执行以下操作:

results.GroupBy(record => record.SelectSingleNode("email").InnerText)
      .Select(group => new Record()
                  {
                       Name = group.First().SelectSingleNode("name").InnerText,
                       Email = group.First().SelectSingleNode("email").InnerText,
                       TotalPoints = group.Sum(record => Convert.ToInt(record.SelectSingleNode("totalpoints").InnerText))
                  });
[Serializable]
[XmlType("record")]
public class Record
{ 
    [XmlElement("name")]
    public String Name { get; set; }
    [XmlElement("email")]
    public String Email { get; set; }
    [XmlElement("totalpoints")]
    public int TotalPoints { get; set; }
}

您可能还想考虑使用XML解析XML。这会让事情变得简单一点。为此,您将创建如下类:

results.GroupBy(record => record.SelectSingleNode("email").InnerText)
      .Select(group => new Record()
                  {
                       Name = group.First().SelectSingleNode("name").InnerText,
                       Email = group.First().SelectSingleNode("email").InnerText,
                       TotalPoints = group.Sum(record => Convert.ToInt(record.SelectSingleNode("totalpoints").InnerText))
                  });
[Serializable]
[XmlType("record")]
public class Record
{ 
    [XmlElement("name")]
    public String Name { get; set; }
    [XmlElement("email")]
    public String Email { get; set; }
    [XmlElement("totalpoints")]
    public int TotalPoints { get; set; }
}
然后可以使用using System.Xml.Serialization对列表进行如下反序列化:

这就为您的问题提供了解决方案:

results.GroupBy(r => r.Email).Select(g => new Record() 
                              {
                                  Name = g.First().Name,
                                  Email = g.First().Email,
                                  TotalPoints = g.Sum(r => r.TotalPoints)
                              });

这没什么不同,但使用起来有点好,我想。

为什么不在“电子邮件”字段中使用“分组”,在“总分”字段中使用“总和”。Linq到XML将是一个很好的解决方案。如果您可以发布一些有用的代码。代码部分:从Web服务获取数据直到输出您的问题可能可以通过多种方式解决,如果您提供输入到输出,我们可以确定最简单/最佳的解决方案。如何从XML文件提取数据?@dwana我已经更新了代码,我认为这应该足够了,您的XML是什么样子的?