Leer y Escribir xml usando Linq


Este va a ser un pequeño artículo donde veremos cómo leer y escribir un documento xml usando Linq. La estructura que va a tener nuestro documento al final será la siguiente:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Personas>
    <Persona>
        <Nombre> </Nombre>
        <Apellido> </Apellido>
        <Edad></Edad>
        <Correo> </Correo>
    </Persona>
</Personas>

Para leer un documento con esta estructura, debemos hacer esto usando Linq:

XDocument xdoc = XDocument.Load(archivo);

lista = (from x in xdoc.Descendants("Persona")
         select new Persona
         {
             Nombre = x.Element("Nombre").Value,
             Apellido = x.Element("Apellido").Value,
             Edad = Convert.ToInt32(x.Element("Edad").Value),
             Correo = x.Element("Correo").Value
         }).ToList();

Aclaremos ciertas cosas con respecto al código anterior: primero, la variable archivo es un string donde se guarda la ruta del archivo que deseamos leer; segundo, Persona es una clase la cual tiene como propiedades Nombre, Apellido, Edad y Correo; por último, la variable lista es una lista del tipo List<Persona> la cual contendrá todos los registros del archivo leído.

Para obtener más información puede mirar esto enlaces sobre Descendants y Element. Si desea aprender más de xml puede leer este tutorial en W3Schools.

Vayamos ahora a la parte de escribir el archivo xml:

if (dataGrid.ItemsSource != null)
{
    XDocument xdoc = new XDocument(new XDeclaration("1.0", "utf-8", "yes"),
            new XElement("Personas",
            from x in dataGrid.ItemsSource.Cast<Persona>()
            select
              new XElement("Persona",
                 new XElement("Nombre", x.Nombre),
                 new XElement("Apellido", x.Apellido),
                 new XElement("Edad", x.Edad),
                 new XElement("Correo", x.Correo)
              )
          )
    );
    xdoc.Save(archivo);
}

El proyecto está en WPF así que estoy usando un DataGrid donde cargo los datos por eso se aprecia ahí la propiedad ItemsSource, pero si usas Windows Form (WinForms) ¡espera! porque este artículo no es con respecto a la interfaz gráfica sino al lenguaje de programación. Para los que usan WinForms pueden cambiar esa parte del código por la variable lista. Como una nota para las personas que desarrollan usando WPF, si descargan el código podrán ver que he usado conceptos que expliqué en Validación en WPF y 2 Ventanas usando WPF de forma desacoplada para crear este proyecto.

Y así de fácil podemos crear y leer documentos xml utilizando Linq. Espero que a las personas que no han probado Linq, este artículo los mueva a aprender un poco más de este proyecto que ha revolucionado la forma en la que hacemos consultas. Aquí les dejo el código en C# XML2LINQ.zip y esta vez les debo el de VB.NET aunque en poco tiempo lo convertiré y aquí en VB.NET usando Windows Form XML2LINQ-VB.zip. Recuerden quitar la extensión .odt y dejar la .zip.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s