System.NullReferenceException:在写入XML文件时

时间:2013-11-15 02:51:18

标签: c# xml linq-to-xml

我正在创建一个注册页面,用于通过regiration表单存储用户详细信息的文件是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>

所以它希望我的代码能够以下面所希望的方式运行我的文件。

I am getting the following error on debugging

3 个答案:

答案 0 :(得分:1)

从给出的代码中可以获得NullReferenceException

的一种可能性

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

~/App_Data/userlogs.xml

- &GT;您的文件应放在RootFolder of Project/App_Data/

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

System.IO.File.Exists(filepath)
{
//true so file exists
//contine
}

答案 1 :(得分:0)

尝试调试程序。

删除try catch部分,以便程序流出异常

添加断点以查看程序的运行方式

试试这些:

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

如果可能,发布更多代码

答案 2 :(得分: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"));
    }
}