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

时间:2012-04-12 11:31:47

标签: c# xml dataset

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

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文件(覆盖该文件中的内容)。

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

可以通过WriteXml函数的某些选项或其他内容完成此操作。或者我是否必须阅读现有的设置文件并保存每个值,使用这些保存的值编写xml和覆盖?

1 个答案:

答案 0 :(得分:1)

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

说过你可以尝试一种解决方法:

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

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