如何仅计算特定学生节点的平均分数,而不是所有分数的平均值

时间:2018-12-04 04:34:38

标签: c#

我有一个学生及其成绩的XML文件。这是一个学生节点的示例。我还有其他学生。

<Students>
  <Student>
    <Name> Billy Blue </Name>
    <Grade> 1 </Grade>
    <Sex> Male </Sex>
    <Age> 7 </Age>
    <Picture> c:/School/Students/BillyBlue </Picture>
    <Grades>
      <Score>80.5</Score>
      <Score>100.0</Score>
      <Score>70.0</Score>
      <Score>0.0</Score>
      <Score>0.0</Score>
      <Score>0.0</Score>
      <Score>0.0</Score>
      <Score>0.0</Score>
      <Score>0.0</Score>
      <Score>0.0</Score>
    </Grades>
  </Student>

我想打印出每个学生的平均分数。我的代码当前正在打印文件中所有分数的平均值。

     foreach (XElement student in listStudents)
        {
           IEnumerable<XElement> listScores =
                from XElement in listStudents.Descendants("Grades").Elements("Score")
                .Where(x => Convert.ToSingle(x.Value) != 0.0)
                select XElement;

            var fAverageScore = 0.0;
            foreach (XElement score in listScores)
            {
                fAverageScore += Convert.ToSingle(score.Value);

            }

            Console.WriteLine("Average Score: " + (fAverageScore / listScores.Count()).ToString("0.00"));
            Console.WriteLine("\n");
        }

1 个答案:

答案 0 :(得分:5)

您需要更改以下内容:

listStudents.Descendants("Grades").Elements("Score")

使用:

student.Elements("Grades").Elements("Score")

,以便它仅从该特定学生节点读取,而不是所有学生读取。

您可以调用Elements方法来获取Grades的子元素Student,然后获得每个分数。

那会是这样的:

from XElement in student.Elements("Grades").Elements("Score")