检查xml文件中的详细信息以验证C#中的登录详细信息

时间:2016-10-28 21:22:19

标签: c# xml linq

我目前正在开发一个涉及C#中的注册/登录表单的项目。我使用平面文件(XML)来存储注册信息,并在C#中使用Xml.Linq来做到这一点。

我目前无法使用我的登录验证码,因为它已经停止工作,因为我将注册码更改为linq版本。我得到的错误代码是......

"未处理的类型' System.NullReferenceException'发生在WaiterApp.exe中的附加信息:对象引用未设置为对象的实例。"。

我已经在下面包含了我的代码,如果有人可以帮我解决这个问题,因为我是C#的新手,我试图调试为什么会这样,但没有运气。谢谢:))

注册代码......

XElement xml = new XElement("RegisterInfo",
        new XElement("User",
        new XElement("Data1", nameTextBox.Text),
        new XElement("Data2", emailTextBox.Text),
        new XElement("Data3", passwordTextBox.Text),
        new XElement("Data4", confirmPasswordTextBox.Text)
        )
        );
        xml.Save("data.xml");
        this.Hide();
        Login ss = new Login();
        ss.Show();

登录代码

XmlDocument doc = new XmlDocument();
        doc.Load("data.xml"); //This code will load the Data xml document with the Login details.
        foreach (XmlNode node in doc.SelectNodes("//RegisterInfo"))
        {
            String Username = node.SelectSingleNode("Data1").Value;
            String Password = node.SelectSingleNode("Data3").Value;

            if (Username == nameTextBox.Text && Password == passwordTextBox.Text)
            {
                MessageBox.Show("You have logged in!");
                this.Hide();
                Main ss = new Main();
                ss.Show();
            }
            else
            {
                MessageBox.Show("Error Logging you in!");
            }

Xml脚本

<?xml version="1.0" encoding="utf-8"?>
<RegisterInfo>
<User>
<Data1>Charlie</Data1>
<Data2>Charlie@gmail.com</Data2>
<Data3>1</Data3>
<Data4>1</Data4>
</User>
</RegisterInfo>

1 个答案:

答案 0 :(得分:1)

  

您可以在路径中指定用户元素(您的代码):

   doc.Load("data.xml");

    foreach (XmlNode node in doc.SelectNodes("//RegisterInfo"))
    {
        //default xpath will be /RegisterInfo/Data1 and will not find the (Data Element) in (RegisterInfo)
        String Username = node.SelectSingleNode("Data1").InnerTex; // so this will be null
        String Password = node.SelectSingleNode("Data3").InnerTex; // so this will be null

        // can't compare null, so null error will be thrown.
        if (Username == nameTextBox.Text && Password == passwordTextBox.Text)
        {
        }
    }
  

您应该做的是指定用户元素:

    doc.Load("data.xml"); 
    foreach (XmlNode node in doc.SelectNodes("/RegisterInfo/User")) //xpath to /RegisterInfo/User
    {
        String Username = node.SelectSingleNode("Data1").InnerTex; // get value of Data1 Value.
        String Password = node.SelectSingleNode("Data3").InnerTex; // get value of Data3 Value.
    }