用我的xml文件检查多个数据

时间:2012-05-25 09:34:07

标签: c# xml visual-studio-2010

我正在创建一个窗口应用程序,我有一个用于显示问题的标签和一个用于回答相应问题的文本框。然后3个按钮用于检查我的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 %";
                    }
                }
            }

请用任何一种方法帮助我

1 个答案:

答案 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变量,并进行一些空检查。