2011-01-18 9 views
11

Duplicar posible:
How to remove whitespace from an XmlDocument¿Hay alguna forma de guardar un XmlDocument * sin * sangría y retornos de línea?

Todos mis búsquedas han criado gente que pide lo contrario, pero tengo un archivo que crece en casi un 50% si se guarda con retornos de línea y sangría.

¿Hay alguna forma de evitar esto?

EDITAR no estoy hablando de la apertura un archivo, pero el ahorro de uno. Este código reproduce el 'bug' para mí:

var path = @"C:\test.xml"; 
System.IO.File.WriteAllText(path, "<root>\r\n\t<line></line>\r\n\t<line></line>\r\n</root>"); 
System.Xml.XmlDocument doc = new System.Xml.XmlDocument(); 
doc.PreserveWhitespace = false; 
doc.Load(path); 
doc.PreserveWhitespace = false; //just in case! 
doc.Save(path); 

Un punto de interrupción en el medio muestra que es efectivamente doc.InnerXml <root><line></line><line></line></root>, como se esperaba. Pero el contenido de test.xml al final es:

<root> 
    <line> 
    </line> 
    <line> 
    </line> 
</root> 
+0

Posible pseudo-duplicado de http://stackoverflow.com/ questions/2035252/how-to-save-xmldocument-with-multiple-indentation-settings –

+1

(no completamente dup/lee vs write - * related * though) –

Respuesta

22

probar este código:

XmlDocument doc = new XmlDocument(); 

using(XmlTextWriter wr = new XmlTextWriter(fileName, Encoding.UTF8)) 
{ 
    wr.Formatting = Formatting.None; // here's the trick ! 
    doc.Save(wr); 
} 
+0

¡Gracias, eso lo ha clavado! – Benjol

+0

Woo, y conserva nuevas líneas en '' bloques !, gracias – Deanna

+0

¡Gracias! Actualmente estoy extrayendo e importando datos de respaldo en Trados 2014 (* .sdlxliff) archivos y se están rompiendo si los guardo sin eliminar el formato xml. – Cowwando

4

Uso XmlWriterSettings:

XmlDocument xmlDoc = new XmlDocument(); 
[...] 
XmlWriterSettings xwsSettings = new XmlWriterSettings(); 
xwsSettings.Indent = false; 
xwsSettings.NewLineChars = String.Empty; 
using (XmlWriter xwWriter = XmlWriter.Create(@"c:\test.xml", xwsSettings)) 
xmlDoc.Save(xwWriter); 
+0

Tenga en cuenta que esto también elimina las nuevas líneas de los bloques '' (pero no espacios adicionales). – Deanna

Cuestiones relacionadas