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