¡Bienvenid@ a La bloguera.net! Iniciar sesión | ÚNETE a la web | Ayuda
Jugando con la información de los XML´s ---> xsd.exe (Parte 1)

Muchas veces necesitamos crear o leer información de un fichero XML que se debe ajustar a un esquema XSD, para ello podemos utilizar la librería que viene con el Framework (System.Xml) y echar mano de las clases XmlElement, XmlNode, etc.

 

Hoy día estoy utilizando otra opción que me ha impresionado mucho por la potencia que te ofrece para trabajar con este tipo de documentos. El .Net Framework nos ofrece una herramienta llamada xsd, esta herramienta genera clases de esquemas XML o de Common Language Runtime a partir de archivos XDR, XML y XSD, o a partir de clases de un ensamblado de motor de tiempo de ejecución.

Esto significa que podemos generar a partir de un fichero xsd (esquema) una estructura de clases (en cualquier lenguaje de programación soportado por el CLR). Con la estructura de clases que nos genera podemos deserializar un documento XML con XmlSerializer de este modo nos instanciamos una serie de objetos de estas clases con la información del documento. Del mismo modo si serializamos objetos de estas clases obtenemos de forma directa un documento XML que se corresponde con ese esquema.

 

Veamos un ejemplo de como utilizar esta herramienta:

 

Tenemos un XSD para representar un libro que tiene un precio, un titulo, varios autores y una editorial con la siguiente estructura:

 

 

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

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

     <xsd:element name="Libro">

         <xsd:complexType>

            <xsd:sequence>

                 <xsd:element name="Titulo" type="xsd:string"/>

<xsd:element name="Autores" type="xsd:string" maxOccurs="10"/>

                 <xsd:element name="Editorial" type="xsd:string"/>

            </xsd:sequence>

            <xsd:attribute name="precio" type="xsd:double"/>

        </xsd:complexType>

   </xsd:element>

</xsd:schema>

 

 

Ahora con xsd generamos las clases asociadas a este esquema. Para ello nos vamos a la consola de Visual Studio (Inicio/Todos los programas/Microsoft Visual Studio 2005/Visual Studio Tool/Símbolo del sistema de Vidual Studio 2005), accedemos a la carpeta donde se encuentra nuestro xsd y ejecutamos el siguiente comando:

 

xsd  –c  esquema.xsd

 

Para más información sobre los parámetros de xsd.exe mira aquí.

Una vez ejecutado este comando ya nos habrá creado un fichero con la extensión correspondiente al lenguaje por defecto que le tengamos indicado al Visual Studio, en mi caso se ha generado un fichero esquema.cs.

Este fichero contendrá una clase llamada Libro que representa al elemento compuesto libro, esta clase contiene para cada elemento que contiene el elemento libro un atributo y su propiedad asociada, por ejemplo para titulo tenemos:

 

            private string tituloField;

      public string Titulo {

        get {

            return this.tituloField;

        }

        set {

            this.tituloField = value;

        }

      }

De este modo ya podemos serializar y deserializar un XML y trabajar con tu contenido.

Ahora vamos a ver como acceder a la información de un documento XML, utilizando la clase generada deserializando previamente.

 

Dado un XML que se ajusta al XSD esquema.xsd:

 

 

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

<Libro xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="libro.xsd" precio="20">

        <Titulo>Caperucita roja</Titulo>

        <Autores> Manolo Pérez</Autores>

        <Autores>María García</Autores>

        <Editorial>Editorial</Editorial>

</Libro>

 

Si ejecutamos este código:

 

 

static void Main(string[] args)

{

     FileStream fs = new FileStream("ejemplo.xml", FileMode.Open);

     XmlSerializer xs = new XmlSerializer(typeof(Libro));

     Libro milibro = (Libro)xs.Deserialize(fs);

     fs.Close();

 

     Console.WriteLine("Precio: " + milibro.precio);

     Console.WriteLine("Titulo: "+milibro.Titulo);

     foreach (string titulo in milibro.Autores)

     {

          Console.WriteLine("Autor: "+titulo);

     }

     Console.WriteLine("Editorial: " + milibro.Editorial);

     Console.ReadLine();

}

La salida es:

 

Precio: 20

Titulo: Caperucita roja

Autor: Manolo Pérez

Autor: María García

Editorial: Editorial

 

De esta forma tan sencilla podemos recoger la información de un XML en una estructura de objetos y de este modo acceder a la misma.

En un proximo post comentaremos cómo hacer lo contrario, una vez que tenemos los objetos de estas clases instanciados serializarlos y crear un documento XML.

                                                                

                                                       To be continue...

 

Posted: viernes, 03 de agosto de 2007 9:15 por Pedro

Comentarios

Aún no ha hecho nadie ningún comentario. Escribe alguno y sé el primero :P

No se permiten comentarios de usuarios anónimos