1

この関数 (look CODE) は、xml ファイルがサーバーからダウンロードされたときに発生します。ローカル データベースにロードしたいのですが...

XML

<?xml version="1.0" encoding="utf-8" ?>
<Questions>
  <idQuestion>1</idQuestion>
  <Question>Question 1</Question>
  <CorrectAns>Ans1</CorrectAns>
  <WrongAns1>Ans2</WrongAns1>
  <WrongAns2>Ans3</WrongAns2>
  <WrongAns3>Ans4</WrongAns3>
  <Category>CategoryName</Category>
</Questions>
<Questions>
  <idQuestion>2</idQuestion>
  <Question>Question 2</Question>
  <CorrectAns>Ans1</CorrectAns>
  <WrongAns1>Ans2</WrongAns1>
  <WrongAns2>Ans3</WrongAns2>
  <WrongAns3>Ans4</WrongAns3>
  <Category>CategoryName</Category>
</Questions>
etc...

コード:

    void downloader_Completed(object sender, DownloadStringCompletedEventArgs e)
    {
        if (e.Error != null)
            return;

        XElement quest = XElement.Parse(e.Result);

        using (QuestionContext context = new QuestionContext(ConnectionString))
        {
            for (int i = 0; i < quest.Length; i++)
            {
                Question q = new Question();
                q.idQuestion = ; 
                q.Question = ;
                q.CorrectAns = ;
                q.WrongAns1 = ;
                q.WrongAns2 = ;
                q.WrongAns3 = ;
                context.QuestionsDB.InsertOnSubmit(q);
                context.SubmitChanges();
            }
        }    
    }

2 つの質問があります: 1) xml コンテンツを読み込んで書き込む方法:

 q.idQuestion = ; 
 q.Question = ;
 q.CorrectAns = ;
 q.WrongAns1 = ;
 q.WrongAns2 = ;
 q.WrongAns3 = ;

2)for (int i = 0; i < quest.Length; i++)ここでquest.Lengthエラーが発生します(理由はわかっています)... 長さを取得するカスタム関数を作成するにはどうすればよいですか?<Questions>タグを数えるのに必要です

4

1 に答える 1

2

xamlには複数のルート要素(質問)があるため、xamlは有効な形式ではありません。

それがこのような正しい形式であると仮定します(私はmodifiecを持っています)

string xmlData = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
<Questions>
  <Question>
    <idQuestion>1</idQuestion>
    <QuestionName>Question 1</QuestionName>
    <CorrectAns>Ans1</CorrectAns>
    <WrongAns1>Ans2</WrongAns1>
    <WrongAns2>Ans3</WrongAns2>
    <WrongAns3>Ans4</WrongAns3>
    <Category>CategoryName</Category>
  </Question>
  <Question>
    <idQuestion>2</idQuestion>
    <QuestionName>Question 2</QuestionName>
    <CorrectAns>Ans1</CorrectAns>
    <WrongAns1>Ans2</WrongAns1>
    <WrongAns2>Ans3</WrongAns2>
    <WrongAns3>Ans4</WrongAns3>
    <Category>CategoryName</Category>
  </Question>
</Questions>";

上記のようにタグをいくつでも持つことができます

これで、このデータを次のようにクラスに変換できます

XElement quest = XElement.Parse(xmlData);

        var questionsData = from qn in quest.Descendants("Question")
                           select new Question
                           {
                               idQuestion = int.Parse(qn.Element("idQuestion").Value),
                               QuestionName = qn.Element("QuestionName").Value,
                               CorrectAns = qn.Element("CorrectAns").Value,
                               WrongAns1 = qn.Element("WrongAns1").Value,
                               WrongAns2 = qn.Element("WrongAns2").Value,
                               WrongAns3 = qn.Element("WrongAns3").Value
                           };

        var Questions = questionsData.ToList();
        var noofquestions = Questions.Count;
        //If you want any question with specific id, say '2'
        int idQuestion = 2;
        var question = Questions.Where(item => item.idQuestion == idQuestion).First();

ここで私の質問クラスはこのようなものです

class  Question
    {
        public int idQuestion ; 
        public string QuestionName ;
        public string CorrectAns ;
        public string WrongAns1 ;
        public string WrongAns2 ;
        public string WrongAns3 ;
    }

次に、上記のプロセスをデータに適用します。

于 2012-12-19T13:18:21.030 に答える