TOC

This article is currently in the process of being translated into Spanish (~98% done).

XML:

Writing XML with the XmlWriter class

En capítulos previos hemos lidiado con la lectura de XML, pero ahora es tiempo de empezar a escribirlo también. Ya que XML es simplemente texto, podría sólo empezar a escribir etiquetas XML a un archivo y darle una extensión xml, pero es más fácil y seguro dejar que el ambiente .NET maneje eso, y justo como con la lectura de XML, hay al menos dos diferentes opciones: La aproximación XmlWriter y la aproximación XmlDocument. Este artículo se enfocará en la primer aproximación, y luego veremos como escribir XML con el XmlDocument en el siguiente capítulo.

La diferencia entre las dos está una vez más relacionada con el consumo de memoria - XmlWriter usa menos memoria que XmlDocument, lo cual es solamente un problema si escribe archivos muy grandes. Otra diferencia importante es que cuando usa XmlDocument, puede leer un archivo existente, manipularlo y luego escribir de regreso los cambios. Con XmlWriter, tendrá que escribir el documento entero desde cero cada vez. Aunque esto no es necesariamente un problema, como siempre, realmente depende de su situación y de sus preferencias personales.

Aquí está un ejemplo de escritura de XML usando la clase XmlWriter:

using System;
using System.Text;
using System.Xml;

namespace WritingXml
{
    class Program
    {
        static void Main(string[] args)
        {
            XmlWriter xmlWriter = XmlWriter.Create("test.xml");

            xmlWriter.WriteStartDocument();
            xmlWriter.WriteStartElement("users");

            xmlWriter.WriteStartElement("user");
            xmlWriter.WriteAttributeString("age", "42");
            xmlWriter.WriteString("John Doe");
            xmlWriter.WriteEndElement();

            xmlWriter.WriteStartElement("user");
            xmlWriter.WriteAttributeString("age", "39");
            xmlWriter.WriteString("Jane Doe");

            xmlWriter.WriteEndDocument();
            xmlWriter.Close();
        }
    }
}

El código arriba creará el siguiente XML:

<users>
  <user age="42">John Doe</user>
  <user age="39">Jane Doe</user>
</users>

Entonces, empezamos creando una instancia de la clase XmlWriter. Toma al menos un parámetro, en este caso la trayectoria en la que el XML debe ser escrito, pero viene en muchas variaciones para varios propósitos. La primer cosa que debmos hacer es llamar al método WriteStartDocument(). Luego de eso, escribimos un elemento de apertura llamado "users". El XmlWriter traducirá esto en <users>. Antes de cerrarlo, escribimos otro elemento de apertura, "user", el cual se convertirá en un hijo de "users". Entonces procedemos a adicionar una atributo (age) al elemento, usando el método WriteAttributeString(), y entonces escribimos el texto interno del elemento, llamando el método WriteString(). Luego nos aseguramos de cerrar el primer elemento "user" con una llamada al método WriteEndElement().

Este proceso es repetido para agregar otro "user", excepto que no llamamos WriteEndElement() como lo hicimos antes. De hecho, debería ser llamado dos veces, ya que tenemos un elemento "users" abierto también, pero XmlWriter hará esto por nosotros cuando llamamos el método WriteEndDocument().

Para lograr que XmlWriter escriba nuestros datos en el disco, llamamos el método Close(). Ahora puede abrir el archivo, "text.xml", en el mismo directorio donde está el archivo EXE de su proyecto, usualmente en el directorio bin\debug.

Y eso es todo lo que necesita para escribir un archivo XML simple. En el próximo capítulo, haremos lo mismo, pero usando la clase XmlDocument.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!