1

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">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>

私が取得しようとしている出力は、このXMLファイルからの辞書です。

0 - Collecion of (Previous and Next Marks) 
1 - Collecion of (Previous and Next Marks)
5 - Collecion of (Previous and Next Marks)

ここで、0、1、5は学生のIDであり、それに応じてその学生のマークのコレクションです。

このために、私はこのクエリを作成しましたが、出力は完全には得られません:
UPDATE(クエリが追加されました)

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) ;

問題:
1。Attribute ID学生ノードのを選択
できません。2。を使用して辞書に使用しているキーを選択できず、key => key.StudentIDエラーが発生します。

ここで解析に使用しているクラスファイル:

class Marks
    {
        public int StudentID
        {
            get;
            set;
        }
        public string MarksId
        {
            get;
            set;
        }
        public string MarksName
        {
            get;
            set;
        }
4

1 に答える 1

2

これをチェックして:

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にエラーがある可能性があることに注意してください:代わりにおそらくエラーが<Previous id="1">Marks 1</Previous>あるはずです<Previous mid="1">Marks 1</Previous>

于 2012-04-04T15:42:05.570 に答える