1

我正在创建一个注册页面,用于通过注册表格存储用户详细信息的文件是 XML 文件。当我使用下面的代码编写条目时,系统会抛出 NullReferenceException 异常。

 protected void register_Click(object sender, EventArgs e)
{
    try
    {
        //var path = Path.Combine(Request.PhysicalApplicationPath, "App_Data\\PageData.xml");
        XDocument doc = XDocument.Load(Server.MapPath("~/App_Data/userlogs.xml"));
        XElement user = new XElement("user",
            new XElement("fname", fname.Text.ToString()),
            new XElement("lname", lname.Text.ToString()),
            new XElement("dob", dob.Text.ToString()),
            new XElement("uid", uid.Text.ToString()),
            new XElement("pwd", pwd.Text.ToString()),
            new XElement("email", email.Text.ToString()),
            new XElement("lastlog", System.DateTime.Now.ToString())
            );
        doc.Root.Element("users").Add(user);
        doc.Save("userlog.xml");
    }
    catch (Exception exe)
    {
        error.Visible = true;
        error.Text = exe.ToString();
    }
}

我的 userslog.xml 文件格式:-

<users>
    <user>
        <fname>abc</fname>
        <lname>xyz</lname>
        <dob>MM/DD/YYYY</dob>
        <uid>username</uid>
        <pwd>***</pwd>
        <email>pqrs@xyz.com</email>
        <lastlog>DATE:TIME</lastlog>
    </user>
</users>

通过这段代码,我想创建新标签

<users>
    <user>
        <fname>abc</fname>
        <lname>xyz</lname>
        <dob>MM/DD/YYYY</dob>
        <uid>username</uid>
        <pwd>***</pwd>
        <email>pqrs@xyz.com</email>
        <lastlog>DATE:TIME</lastlog>
    </user>
    <user>
        <fname>bcd</fname>
        <lname>lmo</lname>
        <dob>MM/DD/YYYY</dob>
        <uid>username1</uid>
        <pwd>***</pwd>
        <email>pqrs@xyz.com</email>
        <lastlog>DATE:TIME</lastlog>
    </user>
</users>

所以它希望我的代码使我的文件以以下所需的方式运行。

我在调试时收到以下错误

4

3 回答 3

1

从给定的代码中,可能有一种可能获得NullReferenceException

1.请检查您的xml文件是否在以下路径中可用:

~/App_Data/userlogs.xml

--> 你的文件应该放在RootFolder of Project/App_Data/

在继续之前,您可以通过以下方式检查文件是否存在:

System.IO.File.Exists(filepath)
{
//true so file exists
//contine
}
于 2013-11-15T03:24:36.347 回答
0

尝试调试程序。

去掉try catch部分,这样程序就会流异常

添加断点查看程序如何运行

试试这些:

  • 文件App_Data/userlogs.xml存在吗?
  • “doc”对象是空的吗?

如果可能,发布更多代码

于 2013-11-15T03:06:42.077 回答
0

这是最终的工作代码:感谢@sudhakar

protected void register_Click(object sender, EventArgs e)
{
        //var path = Path.Combine(Request.PhysicalApplicationPath, "App_Data\\PageData.xml");
    File.Exists("~/App_Data/userlogs.xml");
    {
        XDocument doc = XDocument.Load(Server.MapPath("~/App_Data/userlogs.xml"));
        XElement user = new XElement("user",
            new XElement("fname", fname.Text.ToString()),
            new XElement("lname", lname.Text.ToString()),
            new XElement("dob", dob.Text.ToString()),
            new XElement("uid", uid.Text.ToString()),
            new XElement("pwd", pwd.Text.ToString()),
            new XElement("email", email.Text.ToString()),
            new XElement("lastlog", System.DateTime.Now.ToString())
            );
        doc.Root.Add(user);
        doc.Save(Server.MapPath("~/App_Data/userlogs.xml"));
    }
}
于 2013-11-15T04:38:47.720 回答