2009-01-08 21 views
8

En C# ¿cómo se escribe un DataSet en el archivo sin que se escriba con letra bonita?Cómo NO escribir XML con bonita impresión desde C# DataSet

Usando C# y .NET 2.0, he estado usando dataSet.WriteXml (fileName, XmlWriteMode.IgnoreSchema), que de forma predeterminada está escribiendo el archivo Xml con letra bonita. La compañía que consume los archivos Xml que escribo sugirió que escribir sin la bonita impresión no los afectará, y disminuirá significativamente el tamaño de los archivos. Con un poco de juego en el espacio de nombres System.Xml, encontré una solución. Sin embargo, en mi búsqueda no encontré la respuesta en ningún lado, así que pensé que podría ser útil para otra persona en el futuro si publicaba la pregunta. Además, no me sorprendería en absoluto si hay una forma mejor o al menos diferente de lograr esto.

Para aquellos que no saben (no lo hice hasta hoy), XML "impresión bonita" es:

<?xml version="1.0" standalone="yes"?> 
<NewDataSet> 
    <Foo> 
    <Bar>abc</Bar> 
    </Foo> 
</NewDataSet> 

Sin impresión bonita se ve así:

<?xml version="1.0" encoding="utf-8"?><NewDataSet><Foo><Bar>abc</Bar></Foo></NewDataSet> 

Adicionalmente , el ahorro de tamaño fue significativo, los archivos de 70 mb se están convirtiendo en unos 40 mb. Voy a publicar mi solución más tarde hoy si nadie más lo ha hecho.

Respuesta

8

es muy sencillo, sólo hay que crear un XmlWriter utilizando un XmlWriterSettings que tiene el conjunto Indent propiedad en false:

// The memory stream for the backing. 
using (MemoryStream ms = new MemoryStream()) 
{ 
    // The settings for the XmlWriter. 
    XmlWriterSettings settings = new XmlWriterSettings(); 

    // Do not indent. 
    settings.Indent = false; 

    // Create the XmlWriter. 
    using (XmlWriter xmlWriter = XmlWriter.Create(ms, settings)) 
    { 
    // Write the data set to the writer. 
    dataSet.WriteXml(xmlWriter); 
    } 
} 
+0

También utilicé settings.NewLineOneAttributes = false; pero eso es más o menos donde fui –

1

Si no es posible influir en el formato del conjunto de datos xml, simplemente cargaría el xml en un nuevo XMLDocument y enviaría el XMLDocument.OuterXml que está formateando libremente.

2

Esto es lo que me gustaría probar ...:

EDIT: (no se compila, los ajustes deben ser añadido en XmlWriter.Create constructor - pero la teoría es que hay.)

DataSet ds = new DataSet(); 
System.Xml.XmlTextWriter xmlW = new System.Xml.XmlTextWriter("C:\\temp\\dataset.xml"); 
System.Xml.XmlWriterSettings settings = new System.Xml.XmlWriterSettings(); 
settings.Indent = false; 
settings.NewLineChars = String.Empty; 
xmlW.Settings = settings; 
ds.WriteXml(xmlW); 
+0

Downvoted, porque no compila. La propiedad Configuración no tiene un acceso de conjunto. – casperOne

+0

Tiene toda la razón. Sería mejor como un XmlWriter.Create ("C: \\ temp \\ dataset.xml", configuración) después de que se haya creado la configuración. – cjk

6

más fácil que usar XmlWriterSettings:

XmlTextWriter xml = new XmlTextWriter(fileName, Encoding.UTF8) 
    { Formatting = Formatting.None }; 
dataSet.WriteXml(xml); 
+1

Incluso puede omitir el {Formatting = Formatting.None} -part, ya que este formato es el predeterminado para XmlTextWriter. – atsjoo

Cuestiones relacionadas