如何编写XML文件实现换行且不覆盖原有数据?
解决XML追加写入(不覆盖原有数据)的C#实现方案
嗨,我来帮你搞定这个XML追加写入的问题~你之前的代码为啥会覆盖原有内容呢?因为每次运行都从头新建了一个XmlDocument对象,相当于完全重写了整个文件,旧数据自然就被覆盖啦。要实现追加式写入,核心思路是:先读取已有的XML文件(如果存在),再往里面添加新节点,最后保存。
修改后的完整代码
using System.IO; using System.Xml; // ... 你的其他代码逻辑 ... string pfad = "C:\\temp\\Accounts.xml"; XmlDocument doc = new XmlDocument(); // 第一步:判断文件是否存在,存在则加载现有XML,不存在则初始化新文档 if (File.Exists(pfad)) { doc.Load(pfad); // 加载已有的XML文件 } else { // 文件不存在时,创建根节点并初始化文档 XmlElement root = doc.CreateElement("Login"); doc.AppendChild(root); } // 第二步:获取根节点(不管是加载的还是新建的) XmlElement rootNode = doc.DocumentElement; // 第三步:创建新的user节点及子元素 XmlElement userNode = doc.CreateElement("user"); XmlElement usernameNode = doc.CreateElement("username"); usernameNode.InnerText = txtBenutzerName.Text; userNode.AppendChild(usernameNode); // 第四步:把新节点追加到根节点下(这一步就是实现"追加"的关键) rootNode.AppendChild(userNode); // 第五步:保存文档(此时已有文件会更新,新文件会创建) // 可选:添加格式化设置让XML更美观(自动换行+缩进) XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; settings.IndentChars = " "; // 用4个空格缩进 settings.NewLineOnAttributes = true; using (XmlWriter writer = XmlWriter.Create(pfad, settings)) { doc.Save(writer); } MessageBox.Show("数据已成功追加/创建!");
关键逻辑说明
- 加载现有文件:通过
File.Exists(pfad)判断文件是否存在,存在则用doc.Load(pfad)读取已有XML,避免从头新建覆盖。 - 追加节点:获取根节点后,将新创建的
<user>节点通过AppendChild添加到根节点下,实现数据追加。 - 格式化输出:使用
XmlWriterSettings可以让保存后的XML自动换行、缩进,结构更清晰,符合你要的"换行"需求。
最终XML结构示例
多次运行后,你的XML文件会变成这样(自动换行+缩进):
<Login> <user> <username>第一个用户名</username> </user> <user> <username>第二个用户名</username> </user> </Login>
内容的提问来源于stack exchange,提问作者MxDanger
相关产品推荐
相关产品推荐

