如何找到从XML文档中获得的一组5分的平均值



现在它只是延迟显示每个分数。我想知道如何准确地获得相同的成绩,并找到所有成绩的平均值,并将其显示在页面底部。我不知道如何进一步阐明这个问题,但我肯定会回答任何与此有关的问题。

using System;
using System.Xml;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace XML_Project1
{
class Program
{
static void Main(string[] args)
{
int totalC = 0;
XmlDocument xmlDoc = new XmlDocument();
string XMLpath = Directory.GetCurrentDirectory() + @"grades.xml";
xmlDoc.Load(XMLpath);
XmlNodeList Clist = xmlDoc.GetElementsByTagName("grade");
totalC = Clist.Count;
for (int i = 0; i < Clist.Count; i++)
{
Console.WriteLine(Clist[i].InnerText.ToString());
System.Threading.Thread.Sleep(1000);
}
Console.WriteLine(Environment.NewLine);
Console.WriteLine(totalC.ToString() + " people in XML file.");
Console.ReadLine();
}
}
}

这就是我从中绘制信息的XML文件。

<?xml version="1.0"?>
<class>
<student>
<name>Sam</name>
<grade>76</grade>
</student>
<student>
<name>Joe</name>
<grade>80</grade>
</student>
<student>
<name>Linda</name>
<grade>82</grade>
</student>
<student>
<name>Eugene</name>
<grade>90</grade>
</student>
<student>
<name>Tina</name>
<grade>92</grade>
</student>
</class>

使用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:temptest.xml";
static void Main(string[] args)
{
XDocument doc = XDocument.Load(FILENAME);
Dictionary<string, int> dict = doc.Descendants("student")
.GroupBy(x => (string)x.Element("name"), y => (int)y.Element("grade"))
.ToDictionary(x => x.Key, y => y.FirstOrDefault());
decimal average = (decimal)dict.Average(x => x.Value);
}
}
}

试试看:

string XMLpath = Directory.GetCurrentDirectory() + @"grades.xml";
XDocument xmlDoc = XDocument.Load(XMLpath);
IEnumerable<XElement> gradeElements = xmlDoc.Root.Descendants("grade");
int totalC = gradeElements.Count();
double averageGrade = gradeElements.Select(x => (double)x).Average();
Console.WriteLine(Environment.NewLine);
Console.WriteLine($"{totalC} people in XML file.");
Console.WriteLine($"{averageGrade} average grade.");
Console.ReadLine();

您可以从将每个元素转换为Int开始,而不是将其存储为XmlNode的集合。例如,

var Clist = xmlDoc.GetElementsByTagName("grade")
.Cast<XmlNode>()
.Select(x=> Convert.ToInt32(x.InnerText))
.ToList();

现在你可以计算项目数量(人(和平均值作为

totalC = Clist.Count;
var average = Clist.Average();

完整代码

XmlDocument xmlDoc = new XmlDocument();
string XMLpath = @"e:data.xml";
xmlDoc.Load(XMLpath);
var Clist = xmlDoc.GetElementsByTagName("grade")
.Cast<XmlNode>()
.Select(x=> Convert.ToInt32(x.InnerText))
.ToList();
var totalC = Clist.Count;
var average = Clist.Average();
for (int i = 0; i < Clist.Count; i++)
{
Console.WriteLine(Clist[i]);
System.Threading.Thread.Sleep(1000);
}
Console.WriteLine(Environment.NewLine);
Console.WriteLine($"{totalC} people in XML file.");
Console.WriteLine($"Average {average}");

请包含System.Linq命名空间

最新更新