Compartir a través de


Guardar y escribir un documento

Cuando cargue y guarde un XmlDocument, el documento guardado puede ser diferente al original de varias formas:

  • Si la propiedad PreserveWhitespace se establece en true antes de llamar al método Save, en el resultado se conserva el espacio en blanco del documento; sin embargo, si la propiedad es false, XmlDocument, se aplica sangría automáticamente al resultado.

  • Todos los espacios en blanco entre los atributos se reducen a un carácter de un solo espacio.

  • Se cambia el espacio en blanco entre los elementos. Se conserva el espacio blanco importante, pero no se conserva el poco importante. Sin embargo, cuando se guarda el documento, se utiliza el modo XmlTextWriterSangría de manera predeterminada para imprimir con claridad el resultado con el fin de que sea más legible.

  • De manera predeterminada, el carácter de la comilla que se utiliza delante y detrás de los valores de los atributos se cambia por la comilla doble. Puede utilizar la propiedad QuoteChar en XmlTextWriterpara establecer el carácter de la comilla como doble o simple.

  • De manera predeterminada, se expanden las entidades de caracteres numéricos como {.

  • No se conserva la marca de orden de bytes del documento de entrada. UCS-2 se guarda como UTF-8 a menos que cree explícitamente una declaración XML en la que se especifique otra codificación.

  • Si desea escribir XmlDocument en un archivo o una secuencia, el resultado escrito es el mismo que el contenido del documento. Es decir, la declaración XmlDeclaration solo se escribe si hay alguna en el documento y la codificación que se utiliza al escribir el documento es la misma que la del nodo de la declaración.

Escribir una declaración XmlDeclaration

Los miembros XmlDocument y XmlDeclaration de OuterXml, InnerXml y WriteTo, además de los métodos XmlDocument de Save y WriteContentTo, crean una declaración XML.

Para las propiedades XmlDocument de OuterXml, InnerXml, y los métodos Save, WriteTo y WriteContentTo, la codificación escrita en la declaración XML se obtiene del nodo XmlDeclaration. Si no existe ningún nodo XmlDeclaration, XmlDeclaration no se escribe. Si no hay codificación en el nodo XmlDeclaration, la codificación no se escribe en la declaración XML.

Los métodos XmlDocument.Save y XmlDocument.Save siempre escriben una declaración XmlDeclaration. Estos métodos toman la codificación del sistema de escritura que está escribiendo. Es decir, el valor de codificación en el sistema de escritura invalida la codificación en el documento y en la declaración XmlDeclaration. Por ejemplo, el siguiente código no escribe una codificación en la declaración XML que se encuentra en el archivo de salida out.xml.

Dim doc As New XmlDocument()  
Dim tw As XmlTextWriter = New XmlTextWriter("out.xml", Nothing)  
doc.Load("text.xml")  
doc.Save(tw)  
XmlDocument doc = new XmlDocument();  
XmlTextWriter tw = new XmlTextWriter("out.xml", null);  
doc.Load("text.xml");  
doc.Save(tw);  

Para el método Save, la declaración XML se escribe utilizando el método WriteStartDocument en la clase XmlWriter. Por lo tanto, al sobrescribir el método WriteStartDocument, cambia la forma de escribir el principio del documento.

Para los miembros XmlDeclaration de OuterXml, WriteTo y InnerXml, si no se establece la propiedad Encoding, no se escribe la codificación. De lo contrario, la codificación escrita en la declaración XML es la misma que la que se encuentra en la propiedad Encoding.

Escribir el contenido de un documento con la propiedad OuterXml

La propiedad OuterXml es una extensión de Microsoft de los estándares del Modelo de objetos de documento (DOM) XML del W3C (World Wide Web Consortium). La propiedad OuterXml se utiliza para obtener el marcado de todo el documento XML o tan solo el de un nodo y sus nodos secundarios. OuterXmldevuelve el marcado que representa el nodo en concreto y todos sus nodos secundarios.

El siguiente ejemplo de código muestra cómo guardar un documento por completo como una cadena.

Dim mydoc As New XmlDocument()  
' Perform application needs here, like mydoc.Load("myfile");  
' Now save the entire document to a string variable called "xml".  
Dim xml As String = mydoc.OuterXml  
XmlDocument mydoc = new XmlDocument();  
// Perform application needs here, like mydoc.Load("myfile");  
// Now save the entire document to a string variable called "xml".  
string xml = mydoc.OuterXml;  

El siguiente ejemplo de código muestra cómo guardar únicamente el elemento de documento.

' For the content of the Document Element only.  
Dim xml As String = mydoc.DocumentElement.OuterXml  
// For the content of the Document Element only.  
string xml = mydoc.DocumentElement.OuterXml;  

Por el contrario, puede utilizar la propiedad InnerText si desea el contenido de los nodos secundarios.

Vea también