首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在c#中从xml中提取一些数据

在c#中从xml中提取一些数据
EN

Stack Overflow用户
提问于 2013-02-18 12:54:16
回答 3查看 78关注 0票数 0

我有一个具有下一个结构的xml:

代码语言:javascript
复制
<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中。

EN

回答 3

Stack Overflow用户

发布于 2013-02-18 12:54:52

看一下XElement类--看看这个示例

您可以遍历节点,甚至可以将linq查询定义为:

代码语言:javascript
复制
        XElement allData = XElement.Load("Authors.xml"); 
        if (allData != null) 
        { 
            IEnumerable<XElement> authors = allData.Descendants("Author"); 
            foreach(XElement author in authors) 
                Console.WriteLine((string)author); 
        }

看看这个示例

代码语言:javascript
复制
    string t = "Some title";
    var v = from page in _x.Elements("SitePage")
        where t == page.Element("Title").Value
        select page;
票数 2
EN

Stack Overflow用户

发布于 2013-02-18 13:05:03

好的,你想要的基本上是一个字典包含一个字符串,另一个字典包含一个字符串和一个列表。

代码语言:javascript
复制
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>>,其中第一个键是学生的名字,第二个键是一个当然名称和标记的字典。

票数 1
EN

Stack Overflow用户

发布于 2013-02-18 13:09:06

代码语言:javascript
复制
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",而不是大写。

测试:

代码语言:javascript
复制
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));
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14936855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档