使用数据集写入 xml,而不覆盖现有数据

本文关键字:覆盖 数据 数据集 xml | 更新日期: 2023-09-27 18:30:48

我正在使用数据集来表示我在项目中的设置。代码或多或少如下:

if (!ValidateSettings(SettingsPath)) //returns false if the settingsfile doesn't consist with the DataSet
{
  dsSettings defaultSettings = new dsSettings();
  defaultSettings.ReadXml("settingsTemplate.xml", IgnoreSchema);
  dsSettings.WriteXml(SettingsFilePath);
}

如果我运行此代码,它将复制模板文件中的所有值并将其写入 SettingsFilePath 文件(覆盖该文件中的内容)。

但是,将来假设我向数据集中添加了一个设置。然后我希望保留旧设置(可能由用户编辑),并且仅从模板文件在 xml 文件中添加缺少的设置。

这可以通过一些选项或 WriteXml 函数的某些东西或任何如此简单的内容来完成。还是我必须读取现有的设置文件并保存每个值,写入 xml 并用这些保存的值覆盖?

使用数据集写入 xml,而不覆盖现有数据

每次调用 WriteXML 时,都会在一个有效 XML 数据块中创建 XML。从某种意义上说,它将包含一个根元素。所以另一个调用意味着另一个XML块,如果我们把两者放在一起,我们会得到一个无效的XML文档,因为不会有根节点。这就是为什么你不能非常简单地实现你想要的。

话虽如此,您可以尝试一种解决方法:

  1. 在指定文件夹中保存任意数量的文件。然后将它们全部读入数据表并将它们合并到一个数据表中。

  2. 创建您自己的单个 XML 文件。为此,请使用 WriteXML 方法将 XML 写入 StringWriter。通过创建自己的根级节点,将它们写入磁盘,将此类 XML 块合并到一个 XML 块中。同样,当 readig 首先读取文件时,从根节点中提取 XML 块,然后使用 ReadXML 从流中读取。