2012-04-12 112 views
0

我正在使用DataSet来表示我在项目中的设置。更多或更少的代码如下:使用数据集写入xml而不覆盖现有数据

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

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

说了这么多,你可以尝试一种解决方法:

  1. 保存尽可能多的文件,你在一个指定的文件夹想要的。然后将它们全部读入数据表,并将它们合并成一个数据表。

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