2012-05-25 2 views
1

im создание окна приложения, в котором у меня есть одна метка для отображения вопроса и одно текстовое поле для ответа на соответствующий вопрос. 3 кнопка для проверки ответа с моим xml-файлом и одной кнопкой для следующей вопрос и одна кнопка для предыдущего вопроса.проверить несколько данных с моим xml-файлом

это мой XML-файл

<?xml version="1.0" encoding="utf-8" ?> 
<Exam> 
    <Question number="1" Text="What is IL Code"> 
    <Answer Text="Half compiled, Partially compiled code"> </Answer> 
    </Question> 
    <Question number="2" Text="What is JIT"> 
    <Answer Text="IL code to machine language"> </Answer> 
    </Question> 
    <Question number="3" Text="What is CLR"> 
    <Answer Text="Heart of the engine , GC , compilation , CAS(Code access security) , CV (Code verification)"> </Answer> 
    </Question> 
</Exam> 

теперь нажатия кнопки я хочу, чтобы проверить пользовательский ответ с моей XML-ответ и эту часть я сделал, но небольшая проблема когда это первый вопрос, который является то, что это иль код для этого мой код работает правильно, и когда вопрос изменен, мой код не может принять второй вопрос каждый раз, когда он принимает первый вопрос и сравнивается с этим, так как я могу это достичь? ниже мой отрезала код

string[] arrUserAnswer = textBox1.Text.Trim().ToLower().Split(' '); 
      do 
      { 
       XmlReader reader = XmlReader.Create(@"E:\ferozProject\WindowsFormsApplication1\WindowsFormsApplication1\QuestionFile.xml"); 
       reader.Read(); 
       reader.ReadToFollowing("Question"); 
       reader.MoveToContent(); 
       que = reader.GetAttribute("Text"); 
       reader.ReadToFollowing("Answer"); 
       reader.MoveToContent(); 
       string[] arrXMLAnswer = reader.GetAttribute("Text").ToString().Trim().ToLower().Split(' '); 
       List<string> lststr1 = new List<string>(); 
       if (label2.Text == que) 
       { 
        abc = 1; 
        foreach (string nextStr in arrXMLAnswer) 
        { 
         if (Array.IndexOf(arrUserAnswer, nextStr) != -1) 
         { 
          lststr1.Add(nextStr); 
         } 
        } 
        if (lststr1.Count > 0) 
        { 
         label4.Visible = true; 
         label4.Text = "Your Answer is " + ((100 * lststr1.Count)/arrXMLAnswer.Length).ToString() + "%" + "Correct"; 
        } 
        else 
        { 
         textBox1.Text = "0 %"; 
        } 


       } 
       else 
       { 
        reader.ReadToNextSibling("Question"); 
       } 


      } while (abc <= 0); 
      abc = 0; 

я также использовал второй другой способ для этого, но в котором код не удалось выяснить, на мой вопрос, как из-за я написал вопрос внутри узла вопроса, ниже моего другой код.

XmlDocument docQuestionList = new XmlDocument();// Set up the XmlDocument // 
      docQuestionList.Load(@"E:\ferozProject\WindowsFormsApplication1\WindowsFormsApplication1\QuestionFile.xml"); //Load the data from the file into the XmlDocument // 
      XmlNodeList QuestionList = docQuestionList.SelectNodes("Exam/Question"); 
      foreach (XmlNode nodexm in QuestionList) 
      { 
       string obj = nodexm.SelectNodes("Text").ToString(); 
       if (obj == label2.Text) 
       { 
        string[] arrUserAnswer = textBox1.Text.Trim().ToLower().Split(' '); 
        string[] arrXMLAnswer = nodexm.NextSibling.InnerText.Trim().ToLower().Split(' '); 
        List<string> lststr1 = new List<string>(); 
        foreach (string nextStr in arrXMLAnswer) 
        { 
         if (Array.IndexOf(arrUserAnswer, nextStr) != -1) 
         { 
          lststr1.Add(nextStr); 
         } 
        } 
        if (lststr1.Count > 0) 
        { 
         label4.Text = "Your Answer is " + ((100 * lststr1.Count)/arrXMLAnswer.Length).ToString() + "%" + "Correct"; 
        } 
        else 
        { 
         textBox1.Text = "0 %"; 
        } 
       } 
      } 

, пожалуйста, помогите мне в одном методе

+0

Пожалуйста, не редактируйте свой вопрос, чтобы задать совершенно другой вопрос. –

ответ

2

Что-то вроде:

//setup the doc 
string fn="C:\\bla.xml"; 
XmlDocument xmlDocument=new XmlDocument(); 
xmlDocument.Load(fn); 
XmlNode root=xmlDocument.DocumentElement; 

//get the node 
XmlNode answerNode=root.SelectSingleNode("//Question[@number="+num+"]/Answer"); 

//get the value 
string attrName="Text"; 
XmlAttribute atr=answerNode.Attributes.GetNamedItem(attrName) as XmlAttribute; 
if (atr!=null){ 
    string answer=atr.value; 
} 

сделает вашу жизнь намного проще. Обратите внимание и укажите переменную num, и выполните некоторые нулевые проверки.

+0

в моем приложении i m не удалось написать эту строку xmlDocument.DocumentElement; а также answerNode.getAttribute («текст»); –

+0

См. Исправленный код. –

+0

благодарит много сэра, теперь его работает –

Смежные вопросы