2010-04-23 4 views
7

У меня есть XMLDocument, который я прочитал из файла. Файл является Unicode и имеет символ новой строки '\ n'. Когда я пишу XMLDocument обратно, он имеет символы новой строки '\ r \ n'.Запись XMLDocument в файл со специальным символом новой строки (C#)

Вот код, довольно просто:

XmlTextWriter writer = new XmlTextWriter(indexFile + ".tmp", System.Text.UnicodeEncoding.Unicode); 
writer.Formatting = Formatting.Indented; 

doc.WriteTo(writer); 
writer.Close(); 

XmlWriterSettings имеет свойство, NewLineChars, но я не могу указать параметр настройки на «писатель», он доступен только для чтения.

Я могу создать XmlWriter с заданным свойством XmlWriterSettings, но XmlWriter не имеет свойства форматирования, в результате чего файл без разломов строк вообще отсутствует.

Итак, вкратце, мне нужно написать файл Unicode Xml с символом новой строки '\ n' и Formatting.Indented. Мысли?

+0

Смотри также: http://stackoverflow.com/questions/3415294/how-can-i-generate-xml-with-cr-instead-of-crlf-in-xmltextwriter (который обращается к ответу здесь) –

ответ

5

Я думаю, вы близки. Вам нужно создать писатель из объекта настройки:

(поднятый с XmlWriterSettings MSDN страницы)

XmlWriterSettings settings = new XmlWriterSettings(); 
settings.Indent = true; 
settings.OmitXmlDeclaration = true; 
settings.NewLineOnAttributes = true; 

writer = XmlWriter.Create(Console.Out, settings); 

writer.WriteStartElement("order"); 
writer.WriteAttributeString("orderID", "367A54"); 
writer.WriteAttributeString("date", "2001-05-03"); 
writer.WriteElementString("price", "19.95"); 
writer.WriteEndElement(); 

writer.Flush(); 
+0

Оба ответа подсказывали мне, что мне не хватает: settings.Indent = true; – jaws

5

Использование XmlWriter.Create() для создания писателя и указать формат. Это хорошо работало:

using System; 
using System.Xml; 

class Program { 
    static void Main(string[] args) { 
     XmlWriterSettings settings = new XmlWriterSettings(); 
     settings.NewLineChars = "\n"; 
     settings.Indent = true; 
     XmlWriter writer = XmlWriter.Create(@"c:\temp\test.xml", settings); 
     XmlDocument doc = new XmlDocument(); 
     doc.InnerXml = "<root><element>value</element></root>"; 
     doc.WriteTo(writer); 
     writer.Close(); 
    } 
} 
Смежные вопросы