我有一个学生及其成绩的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");
}
答案 0 :(得分:5)
您需要更改以下内容:
listStudents.Descendants("Grades").Elements("Score")
使用:
student.Elements("Grades").Elements("Score")
,以便它仅从该特定学生节点读取,而不是所有学生读取。
您可以调用Elements
方法来获取Grades
的子元素Student
,然后获得每个分数。
那会是这样的:
from XElement in student.Elements("Grades").Elements("Score")