2010-05-09 110 views
0

如何與更新它時,註釋行儲蓄仍然存在之後的XML文件的工作。保存一個XML文件,而不

這是我保存文件的代碼片段:

public static void WriteSettings(Settings settings, string path) 
    { 
     XmlSerializer serializer = new XmlSerializer(typeof(Settings)); 
     TextWriter writer = new StreamWriter(path); 
     serializer.Serialize(writer, settings); 
     writer.Close();    
    } 
+0

BTW你應該使用'使用(TextWriter的作家=新的StreamWriter(路徑)) {serializer.Serialize(writer,settings);}'。即使有例外情況,也能確保作者得到清理。 – 2010-05-09 05:07:09

回答

0

此代碼將完全覆蓋XML文件。爲了保留現有文件中的註釋,您必須先閱讀它,然後更新並保存。

+0

我怎麼做(讀取,更新,保存)? 你有一個樣本? 難道就沒有別的辦法,我可以節省的評論? 謝謝! – little 2010-05-09 05:21:53

+0

也可以檢查http://stackoverflow.com/questions/2129414/how-to-insert-xml-comments-in-xml-serialization – volody 2010-05-09 06:09:29

+0

(讀取,更新,保存)是neccessary如果你想保留做過評論外部(如手動編輯) – volody 2010-05-09 06:18:23

3

我不知道我理解你的要求。我會說不要使用XmlSerializer,因爲它被設計用於以XML形式創建對象的序列化版本。對象中沒有XML註釋,因此爲該對象生成的XML將不會生成任何註釋。如果你想對付純粹的XML,只需使用一個簡單的XML解析類,而不是一個專爲序列化類作爲XML文檔:

string myXml = 
    "<?xml version=\"1.0\" encoding=\"utf-8\" ?>" + Environment.NewLine + 
    "<!-- This is a comment -->" + Environment.NewLine + 
    "<Root><Data>Test</Data></Root>"; 

System.Xml.XmlDocument xml = new System.Xml.XmlDocument(); 
xml.PreserveWhitespace = true; 
xml.LoadXml(myXml); 
var newElem = xml.CreateElement("Data"); 
newElem.InnerText = "Test 2"; 
xml.SelectSingleNode("/Root").AppendChild(newElem); 
System.Xml.XmlWriterSettings xws = new System.Xml.XmlWriterSettings(); 
xws.Indent = true; 
using (System.Xml.XmlWriter xw = System.Xml.XmlWriter.Create(Console.Out, xws)) 
{ 
    xml.WriteTo(xw); 
}