如何防止替换XML文件中的先前数据

时间:2012-09-21 00:18:23

标签: c# .net xml

我正在Windows窗体应用程序中创建一个示例登录表单&我正在尝试将我的登录用户名或密码保存在XML文件中,但是当我提交用户名或密码时,它会替换之前的条目。

我想要的是,当我提交用户名或密码时,它应该附加到同一个XML文件中,但不要替换之前的任何条目。

像:

<Table>
  <Entry>
    <User>first_user1@gmail.com</User> 
    <Password>*********</Password> 
  </Entry>
</Table>

<Table>
  <Entry>
    <User>second_user2@gmail.com</User> 
    <Password>*********</Password> 
  </Entry>
</Table>

但它每次都取代了第一次,而没有为第二次进入提供空间

请给我解决方案

这是我的代码:

private void button1_Click(object sender, EventArgs e)
{
XmlTextWriter writer = new XmlTextWriter("entry.xml", System.Text.Encoding.UTF8);
        writer.WriteStartDocument(true);
        writer.Formatting = Formatting.Indented;
        writer.Indentation = 2;
        writer.WriteStartElement("Table");
        createNode(textBox1.Text, textBox2.Text, writer);
        writer.WriteEndElement();
        writer.WriteEndDocument();
        writer.Close();
        MessageBox.Show("XML File created ! ");

}

private void createNode(string pName, string pPass, XmlTextWriter writer)
{
    writer.WriteStartElement("Entry");
    writer.WriteStartElement("User");
    writer.WriteString(pName);
    writer.WriteEndElement();
    writer.WriteStartElement("Password");
    writer.WriteString(pPass);
    writer.WriteEndElement();
    writer.WriteEndElement();
}

1 个答案:

答案 0 :(得分:0)

使用LINQ To XML。它更加灵活:

private void AddEntry(XElement xml, string user, string password)
{
    xml.Add(new XElement("Entry",
                         new XElement("User", user),
                         new XElement("Password", password)));
}

然后

XElement x = XElement.Load("In.xml");
AddEntry(x, "newuser", "newpassword");
x.Save("In.xml");

所以,如果您的文件是:

<Table>
  <Entry>
    <User>first_user1@gmail.com</User>
    <Password>*********</Password>
  </Entry>
</Table>

你得到一个输出:

<?xml version="1.0" encoding="utf-8"?>
<Table>
  <Entry>
    <User>first_user1@gmail.com</User>
    <Password>*********</Password>
  </Entry>
  <Entry>
    <User>newuser</User>
    <Password>newpassword</Password>
  </Entry>
</Table>