XML到本地数据库中的Windows Phone 7

问题描述:

此功能(看CODE)当XML文件是从我的服务器下载的发生。现在我想加载它在我的本地数据库...XML到本地数据库中的Windows Phone 7

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

CODE:

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++) Here quest.Length给出错误(我知道为什么)...如何使自定义函数获得长度?我需要它计数<Questions>标签

+2

嗯,它看起来不像有效的XML - 它有2个顶层元素... –

+0

为什么不呢? etc ...不是xml的一部分:) – a1204773

您的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 ; 
    } 

现在应用上述过程到您的数据,以任何方式适用

+0

谢谢你的代码...但我怎样才能访问例如idQuestion,所以我可以做那样的'q.idQuestion = idQuestion'? – a1204773

+0

更新了答案,检查它 – nkchandra