Cursos gratis, articulos, codigos fuente, programacion..

Google
Xml en visual basic.net

En este articulo vamos a revisar la forma en como podemos generar y manipular el lenguaje extensible de marcado(XML) utilizando visual basic 2005.

Visual basic se complementa de clases que ofrecen los siguientes espacios de nombres que se relacionan con el uso de XML, mediante la cual podemos transformar, manipular y serializar los documentos XML:

  • System.Xml proporciona un soporte central para una serie de estandares Xml(aqui podemos incluir las DTD, DOM, XDR,XPath,XSLT y SOAP).
  • System.Xml.Serialization proporciona objetos para luego utilizarlos en al transformacion de objetos desde y hacia documentos XML.
  • System.Xml.Schema proporciona un conjunto de objetos que permiten la carga y creacion de esquemas, asi como tambien la gestion de flujos de datos asociados a dichos esquemas.
  • System.Xml.Xpath proporciona un motor de evaluacion y de analisis para el lenguaje de Flujos de datos XML.
  • System.Xml.Xsl proporciona objetos necesarios cuando se trabaja con el XSL y las transformaciones XSLT.

En concreto, el objetivo de este articulo es:

  1. Aprender la logica de XML.
  2. Relacionarse con el espacio de nombres que se enlaza con la tecnologia XML.
  3. Ver algunas de las clases contenidas dentro de este espacio de nombres.
  4. Generar, manipular y transformar XML utilizando visual basic.

Una pequeña introduccion a XML....

Xml es un lenguaje de marcado similar al HTML, siendo ambos pertenecientes a sus raices en el lenguaje estandarizado y generalizado de marcado(SGML). Lo que significa que XML potencia una de las caracteristicas mas utiles de HTML, pero hay que tomar en cuenta algo muy importante, que XML difiere de HTML, en la presentacion de datos mientras que HTML es un mecanismo para el mostrado de los mismos.

Veamos un pequeño ejemplo:

Este documento XML es utilizado para representar un pedido de un almacen, con una coleccion de peliculas.

Veamos algunas caracteristicas:

  • Las etiquetas se utilizan para especificar los contenidos de un documento, como ejemplo: <Orden>
  • Los elementos(se pueden llamar nodos), se pueden considerar como los objetos dentro del documento.
  • Los elementos son los bloques de construccion. Cada uno de ellos tiene una etiqueta de inicio y otra de fin, como por ejemplo:<Orden>...</Orden>.
  • Los datos pueden ser observados en el elemento.

Como ultimo punto consideramos el hecho de que XML es jerarquico.

    • El documento del ejemplo tiene un nodo raiz : <Pelicula>
    • Las ramas del nodo raiz son elementos de tipo <Orden>
    • Las hojas del elemento(Orden) son sus atributos nombre, id,cantidad

Algo practico en lo que podemos utilizar XML en visual basic es el mostrado de los empleados de la empresa distribuidora de peliculas, un pedido concreto en alguna aplicacion , para que este distribuidor pueda completar el pedido y despues ser guardado en una base de datos.

El proceso de serializacion

Vamos a mostrar el uso practico de XML mediante los datos en serie de una clase.

Los datos en serie de un objeto significa que esta escrito en una secuencia o flujo de informacion como por ejemplo un archivo o una conexion o tambien el proceso inverso: que un objeto no este serializado.

Para ayudarle a comprender mejor el funcionamiento del procesamiento de datos en serie XML, examinemos y veamos esta clase vista anteriormente, “Orden”. Esta clase vamos a implementarla en Visual basic .net para luego instanciar objetos de la clase y luego pasar a serializarlos.

Clase misma que fue puesta como elemento rama del archivo xml visto antes.visual basic.net contiene un espacio de nombres para el desarrollo de clases e interfaces que soportan el paso de datos en serie de objetos a XML y viceversa. Este espacio es llamado: System.Xml.Serialization, espacio comentado al inicio del articulo. Para el paso en forma de series se dispone de la clase XmlSerializer.

Veamos el uso de esta clase:

Creamos una clase dentro de una aplicación a consola. Dentro del sub Main creamos un objeto de XmlSerializer, donde especificamos el objeto a convertir en serie y el tipo en el constructor. Luego creamos un objeto de la clase implementada, el mismo mandado como parámetro en la clase XmlSerializer.

Invocamos al metodo Serialize del objeto XmlSerializer especificando la secuencia de datos donde se escribirá el objeto en forma de serie, en este caso Console.Out y el objeto que se ha de poner en serie, que es el segundo parámetro.

Podemos seguir comentando acerca del codigo, por ejemplo, el primer parámetro del metodo Serialize esta sobreescrito, de modo que podemos poner en serie XML sobre un archivo, un stream, un textWriter o un XmlWriter. En caso de que se quiera pasar a un stream, textWriter o XmlWriter, es posible añadir un tercer parámetro al metodo Serialize, que es del tipo XmlSerializerNamespaces que es utilizado para especificar una lista de espacios de nombres, que son los que califican los nombres en el documento generado en formato XML. Estas sobreescrituras son las siguientes:

public Sub Serialize(Stream, Object)

public Sub Serialize(TextWriter, Object)

public Sub Serialize(XmlWriter, Object)

public Sub Serialize(Stream, Object, XmlSerializerNamespaces)

public Sub Serialize(TextWriter, Object, XmlSerializerNamespaces)

public Sub Serialize(XmlWriter, Object, XmlSerializerNamespaces)

 

Al ejecutar tendrá que salir en la pantalla la siguiente salida:

La salida nos muestra el modo en el que el metodo Serialise pone en serie el objeto por defecto.

•  Cada objeto que se ha dispuesto en serie se representa como un elemento con el mismo nombre que la clase, como es el caso Orden.

•  Los miembros de datos individuales de la clase, están contenidos en elementos que tienen el nombre de los miembros de los datos, como es el caso de nombre, id, cantidad.

•  Vemos la versión especifica de XML generado, en este caso la 1.0.

•  la codificación utilizada es IBM 850

•Los esquemas para describir el objeto utilizado son: www.w3.org/2001/XMLSchema-instance y www.w3.org/2001/XMLSchema

Tambien encontramos otro metodo denominado Deserialize que pertenece a la clase XmlSerializer que reconstruye al objeto a su situación original (deja de estar en serie). Este metodo se sobreescribe y puede dejar de poner en serie el Xml, que es presentado como un stream, TextReader o XmlReader. Las sobrecargas son las siguientes

Public Function Deserialize(Stream) As Object

Public Function Deserialize(TextReader) As Object

Public Function Deserialize(XmlReader) As Object

Antes de seguir comentando acerca de este metodo , crearemos una nueva clase llamada OrdenMultiple, que contiene una matriz de elementos de tipo Orden.

Esta clase presenta en sus atributos un array de objetos de tipo Orden. Luego para poder ver el ejemplo de procesamiento en serie, empezamos creando un ejemplo de un pedido que es almacenado como archivo XML, denominado Filmorama.xml

Luego de obtener el archivo Xml, tenemos que modificar el Main para que los objetos creados dejen de estar en serie.

En las primeras líneas importamos las librerías y espacios de nombres, en este caso como usaremos el archivo con extensión xml creado con anterioridad usaremos la clase .IO y las demás correspondientes a la serializacion.

Creamos un objeto de tipo FileStream que es el que nos conectara con el archivo a usar. Luego creamos un objeto de tipo XmlSerializer donde asignamos como parámetro la nueva clase que OrdenMultiple y por ultimo un objeto de tipo OrdenMultiple que recibirá los objetos deserializados, eso se vee mediante filmom = serialize.Deserialize(deserie) .

Luego que la variable filmom recibe los datos deserializados se pasa a imprimir mediante un foreach. El codigo a imprimir es el siguiente:

Bueno, hasta aqui llegamos al final del presente articulo, mas adelante se vera mas a fondo sobre este tema...