2009-12-30 28 views
12

Estoy creando un formato similar a Xml usando XmlWriter. Pero en el resultado también hay información de versión.Eliminando la versión del archivo xml

<?xml version="1.0" encoding="utf-8"?> 

No lo necesito en mi archivo. ¿Cómo puedo hacer eso? ¿Hay alguna forma de eliminarlo por código?

+9

Stop! ¡Por favor! No hagas "formatos similares a XML". Use XML real. Si es similar a XML, aparecerá otro desarrollador, lo verá, asumirá que es XML y luego tendrá problemas cuando intente analizarlo como XML. (Y una vez que use XML real, el uso de la instrucción de procesamiento no será un problema, ya que los valores dados allí son los valores predeterminados que se asumen cuando falta esa instrucción de procesamiento). – Quentin

+2

Esa es la declaración XML requerida por la especificación. ¿Por qué quieres eliminarlo? (La declaración es opcional en XML 1.0 pero se requiere en XML 1.1) –

+0

Además, la información que está buscando está contenida en la pregunta _Omitir instrucciones de procesamiento XML al serializar un objeto_ (http://stackoverflow.com/questions/164585/ omitting-xml-processing-instruction-when-serializing-an-object) –

Respuesta

19

Uso los ConformanceLevel y OmitXmlDeclaration propiedades. Ejemplo:

XmlWriter w; 
w.Settings = new XmlWriterSettings(); 
w.Settings.ConformanceLevel = ConformanceLevel.Fragment; 
w.Settings.OmitXmlDeclaration = true; 
+0

por qué debería usar ConformanceLevel está funcionando sin establecer w.Settings.ConformanceLevel = ConformanceLevel.Fragment; además. ¿Qué es ConformanceLevel? – viky

+1

El nivel de conformidad 'Fragmento' significa que no está escribiendo un documento completo, está escribiendo un fragmento. La documentación dice que establecer 'OmitXmlDeclaration' en' true' no tendría ningún efecto si 'ConformanceLevel' está establecido en' Document'. –

+0

Simplemente tenga en cuenta que no necesita tener la línea 'w.Settings.ConformanceLevel = ConformanceLevel.Fragment;' Lanzará un error si también utiliza 'writer.WriteStartDocument();'. Podría argumentarse que no debería usarlo de esta manera de todos modos, pero funciona siempre que lo deje como 'settings.ConformanceLevel = ConformanceLevel.Auto;'. – Ravendarksky

11

Al crear su XmlWriter, pasar a través de la configuración que desee utilizar XmlWriterSettings:

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

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

XmlWriterSettings tiene también otras propiedades (guión y más).

Cuestiones relacionadas