0

次の構造の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

私はそれを管理して、生徒の名前を抽出し、ツリーリストにノードとして配置します。

4

3 に答える 3

2

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-18T12:54:52.187 に答える
0
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 }
                                  )
                         };    

null 値を確認する必要がある場合があります。これは非常に簡単なデバッグではないことはわかっています。

[編集] 大文字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));
    }
}
于 2013-02-18T13:09:06.617 に答える