我有一个具有下一个结构的xml:
<main>
<students>
<student>
<name> John </name>
<phone> 123 </phone>
<courses>
<course>
<mark> 5 </mark>
<room> 11D </room>
<name> Math </name>
</course>
<course>
<mark> 8 </mark>
<room> 12a </room>
<name> Literature </name>
</course>
</courses>
</student>
<student>
<name> Terry </name>
<phone> 332 </phone>
<courses>
<course>
<mark> 9 </mark>
<room> 12D </room>
<name> Math </name>
</course>
<course>
<mark> 4 </mark>
<room> 2a </room>
<name> Literature </name>
</course>
</courses>
</student>
</students>
<profs>
....
</profs>
</main>如何获得这种格式的信息:
约翰->数学,5;文学,8特里->数学,9;文学,4
我想要做的是创建这样一个树列表:
约翰-_数学-5-_文学-8特里-_数学-9,_文学-4
我管理它来提取学生的名字,并将它们作为节点放在treelist中。
发布于 2013-02-18 12:54:52
看一下XElement类--看看这个示例
您可以遍历节点,甚至可以将linq查询定义为:
XElement allData = XElement.Load("Authors.xml");
if (allData != null)
{
IEnumerable<XElement> authors = allData.Descendants("Author");
foreach(XElement author in authors)
Console.WriteLine((string)author);
}看看这个示例
string t = "Some title";
var v = from page in _x.Elements("SitePage")
where t == page.Element("Title").Value
select page;发布于 2013-02-18 13:05:03
好的,你想要的基本上是一个字典包含一个字符串,另一个字典包含一个字符串和一个列表。
var xml = XElement.Parse("");
var students = xml.Descendants("student");
students.ToDictionary(x => x.Element("name").Value,
x => x.Descendants("course")
.ToDictionary(y => y.Element("name").Value,
y => int.Parse(y.Element("mark").Value)));这将创建一个Dictionary<string, Dictionary<string, int>>,其中第一个键是学生的名字,第二个键是一个当然名称和标记的字典。
发布于 2013-02-18 13:09:06
var allData = XElement.Parse("");
var query = from student in allData.Descendants("student")
let name = student.Element("name").Value
select new {
StudentName = name ,
Courses =
(from course in student.Descendants("course")
let mark = course.Element("mark").Value
let courseName = course.Element("name").Value
select new {
CourseName = courseName ,
Mark = mark }
)
}; 您可能需要检查空值。我知道这不是很容易调试。
编辑 allData.Descendants("student")和"student",而不是大写。
测试:
foreach (var student in query)
{
Console.WriteLine(student.StudentName);
foreach (var course in student.Courses)
{
Console.WriteLine(string.Format(" - {0} => {1}", course.CourseName, course.Mark));
}
}https://stackoverflow.com/questions/14936855
复制相似问题