2012-04-12 113 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從流中讀取。