2010-04-23 12 views
7

Tengo un XMLDocument que he leído desde el archivo. El archivo es Unicode y tiene el carácter de nueva línea '\ n'. Cuando vuelvo a escribir XMLDocument, tiene los caracteres de nueva línea '\ r \ n'.Escribiendo XMLDocument en un archivo con un carácter de nueva línea específico (C#)

Aquí está el código, bastante simple:

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

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

XmlWriterSettings tiene una propiedad, NewLineChars, pero soy incapaz de especificar el parámetro de configuración en 'escritor', que es de sólo lectura.

Puedo crear un XmlWriter con una propiedad XmlWriterSettings especificada, pero XmlWriter no tiene una propiedad de formateo, lo que da como resultado un archivo sin ningún salto de línea.

Así que, en resumen, necesito escribir un archivo Unicode Xml con carácter de nueva línea '\ n' y formateo. Indeseado. ¿Pensamientos?

+0

ver también: http://stackoverflow.com/questions/3415294/how-can-i-generate-xml-with-cr-instead-of-crlf-in-xmltextwriter (que se refiere a una respuesta aquí) –

Respuesta

5

Creo que estás cerca. Es necesario crear el escritor del objeto configuración:

(levantado de la página 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

Ambas respuestas me indicaron lo que me faltaba: settings.Indent = true; – jaws

5

Uso XmlWriter.Create() para crear el escritor y especificar el formato. Esto funcionó bien:

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(); 
    } 
} 
Cuestiones relacionadas