You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:39:51