2010-05-09 4 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 (запись, настройки);} '. Обеспечивает очистку записи, даже если есть исключение. –

ответ

0

Этот код будет перезаписывать файл XML полностью. Чтобы сохранить комментарии в существующем файле, вы должны сначала его прочитать, а затем обновить и сохранить.

+0

Как это сделать (чтение, обновление, сохранение)? У вас есть образец? Нет ли другого способа сохранить комментарии? Спасибо! – little

+0

, а также вы можете проверить http://stackoverflow.com/questions/2129414/how-to-insert-xml-comments-in-xml-serialization – volody

+0

(чтение, обновление, сохранение) необходимо, если вы хотите сохранить сделанные комментарии внешне (например, ручное редактирование) – volody

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); 
} 
Смежные вопросы