C# 通过LINQ从XML元素生成字典
我正在尝试解析XML文件,并以所需格式获得一些输出 这是我的XML文件格式C# 通过LINQ从XML元素生成字典,c#,linq,C#,Linq,我正在尝试解析XML文件,并以所需格式获得一些输出 这是我的XML文件格式 <?xml version="1.0" encoding="utf-8" ?> <Sample> <Student name="Tom" id="0" batch="1"> <Performance> <Previous id="1">Marks 1</Previous> <Next mid="2">M
<?xml version="1.0" encoding="utf-8" ?>
<Sample>
<Student name="Tom" id="0" batch="1">
<Performance>
<Previous id="1">Marks 1</Previous>
<Next mid="2">Marks 2</Next>
<Next mid="3">Marks 3</Next>
</Performance>
</Student>
<Student name="Jerry" id="1" batch="1">
<Previous mid="1">Marks 4</Previous>
<Next mid="2">Marks 5</Next>
<Next mid="3">Marks 6</Next>
<Next mid="4">Marks 12</Next>
</Student>
<Student name="Kate" id="5" batch="2">
<Previous mid="2">Marks 7</Previous>
<Previous mid="3">Marks 8</Previous>
<Next mid="4">Marks 6</Next>
</Student>
</Sample>
其中0、1、5是学生的ID,相应地是该学生的分数集合
为此,我编写了这个查询,它并没有给出我的输出:更新(添加查询) 选中此项:
var dictionary = (from student in xElement.Descendants("Student")
let marks = student.Descendants()
.Where(e => new []{"Previous" ,"Next"}
.Contains(e.Name.ToString()))
select new {student, marks})
.ToDictionary(t => t.student.Attribute("id").Value,
t => t.marks.Select(mark => new Data {
MarkId = mark.Attribute("mid").Value,
MarkName = mark.Value
}).ToList());
请注意,您的XML可能有一个错误:
除了
标记1
之外,可能还应该有标记1
请显示到目前为止的查询。@DanielHilgarth:Oops!忘记插入片段了。补充
XDocument xdoc = XDocument.Load("XMLfile1.xml");
var content = xdoc.Descendants("Student")
.Select(st => st.Descendants("Previous")
.Union(st.Descendants("Next"))
.Select(terms => new Marks { MarksId = terms.Attribute("mid").Value, MarksName = terms.Value })).ToDictionary<Marks, int>(key => key.StudentId) ;
class Marks
{
public int StudentID
{
get;
set;
}
public string MarksId
{
get;
set;
}
public string MarksName
{
get;
set;
}
var dictionary = (from student in xElement.Descendants("Student")
let marks = student.Descendants()
.Where(e => new []{"Previous" ,"Next"}
.Contains(e.Name.ToString()))
select new {student, marks})
.ToDictionary(t => t.student.Attribute("id").Value,
t => t.marks.Select(mark => new Data {
MarkId = mark.Attribute("mid").Value,
MarkName = mark.Value
}).ToList());