Colaboraciones en el Guille

Leer y escribir archivos XML en ASP .Net

Creación de archivos Nested XML 

Fecha: 12/Ene/2006 (11 de Enero de 2006)
Autor: Ing. Fernando Luque Sànchez

fls2307@hotmail.com



Sres. Desarrolladores, nuevamente para compartir con ustedes sobre el apasionante tema del desarrollo y la programación de aplicaciones Web ASP .Net utilizando Visual Basic .Net

Algo de teoría

DataSet, que es una caché de memoria interna de datos recuperados de un origen de datos, representa un componente fundamental de la arquitectura de ADO.NET. DataSet está compuesto por una colección de objetos DataTable que se pueden relacionar entre ellos mediante objetos DataRelation. También se puede imponer la integridad de los datos de DataSet mediante los objetos UniqueConstraint y ForeignKeyConstraint.

Mientras que los objetos DataTable contienen los datos, DataRelationCollection permite desplazarse por la jerarquía de la tabla. Las tablas están incluidas en un DataTableCollection al que se obtiene acceso a través de la propiedad Tables. Al obtener acceso a los objetos DataTable, hay que tener en cuenta que éstos distinguen entre mayúsculas y minúsculas condicionalmente. Por ejemplo, si un objeto DataTable se denomina "mydatatable" y otro "Mydatatable", se considerará que una cadena utilizada para buscar una de las tablas distingue entre mayúsculas y minúsculas. Sin embargo, si existe "mydatatable" pero no existe "Mydatatable", se considerará que la cadena de búsqueda no distingue entre mayúsculas y minúsculas. .

Un DataSet puede leer y escribir datos y esquemas como documentos XML. Los datos y esquemas pueden transportarse, a continuación, a través de HTTP y cualquier aplicación puede utilizarlos en cualquier plataforma que sea compatible con XML. Los esquemas se pueden guardar como esquemas XML mediante el método WriteXMLSchema, y tanto los esquemas como los datos se pueden guardar mediante el método WriteXML. Hay que utilizar el método ReadXML para leer un documento XML que incluya esquema y datos.

En una implementación normal de varios niveles, los pasos de creación y actualización de un DataSet y, a su vez, de actualización de los datos originales, son los siguientes:

  1. Construir y llenar cada DataTable de un DataSet con datos desde un origen de datos mediante DataAdapter.
  2. Cambiar los datos de los objetos DataTable individuales mediante la adición, actualización o eliminación de objetos DataRow.
  3. Llamar al método GetChanges para crear un segundo DataSet que sólo incorpore los cambios realizados en los datos.
  4. Llame al método Update de DataAdapter, pasando el segundo DataSet como argumento.
  5. Se invoca el método Merge para combinar los cambios del segundo DataSet con el primero.
  6. Invocar al método AcceptChanges de DataSet para aceptar los cambios. O bien, invocar al método RejectedChanges para cancelar los cambios.

En nuestro ejemplo describiremos como manejar documentos XML, leer desde estos la información y escribir en estos el contenido de un DataSet.

Creación de archivos XML manualmente

Para insertar un archivo XML dentro de nuestra aplicación debemos seguir los siguientes pasos:

1. Seleccionar Agregar nuevo elemento del menú Proyecto y seleccionar Archivo XML, escribir el nombre del archivo y pulsar Abrir
Archivos XML

2. Escribir el contenido del archivo XML
Archivos XML

En la figura anterior se nota el ingreso de dos elementos Cliente dentro del elemento principal o raiz Clientes, cada elemento ingresado tiene 04 atributos: ClienteId, Nombre, Apellidos y Profesion.

Tip: En la Vista de datos el ingreso de estos es mas sencillo, previamente debe crearse la estructura en la vista XML, luego pasar a la vista de datos y agregar los datos. La vista de datos para el ejemplo anterior es:
Archivos XML

En la fila donde aparece el asterisco puede insertarse facilmente otro Cliente.

Creación de un esquema desde el documento XML creado
Una vez creado el documento o archivo XML se puede crear facilmente un esquema (archivo xsd), simplemente seleccionar en la vista XML la opción Crear esquema del menú XML, para el archivo XML anterior se creará un esquema como se muestra en la figura:
Archivos XML

Leer los archivos XML simples
Para leer archivos XML utilizamos en método ReadXML del DataSet previamente instanciado, este método crea un DataTable en el DataSet unicamente con los datos del archivo XML. La figura siguiente muestra el resultado de leer el archvo XML Clientes.xml (previamente inserté a toda la familia...)

Archivos XML

Importante
ReadXML unicamente lee el contenido del archivo XML cuando tiene un solo nivel jerárquico, note la estructura del archivo XML People.xml que se muestra en la siguiente figura:
Archivos XML

El elemento Raíz People contiene elementos Person, estos a su vez otro nivel Name y este anidado los elementos FirstName y LastName, al leer el archivo xml usando ReadXML  el resultado se muestra asi:
Archivos XML

Entonces... ¿Cómo se lee el contenido ?
Será posiblemente el contenido de otro artículo, tiene que ver con XMLDataDocument y XPath (muy interesante),

Escribir archivos XML

Para escribir el contenido de un DataSet en un archivo XML podemos (para el alcance del artículo):

Usando los datos de la tabla Products de la base de datos Northwind preparamos el ejemplo como se muestra:
Archivos XML

Los resultados de escribir los datos sin esquema y con esquema se muestran en las figuras siguientes:

Archivos XML

Note que unicamente se muestran los datos de los productos.

Archivos XML

En este archivo XML se muestra primero el esquema y luego los artículos.

Código para el botón sin esquema

Private Sub cmdSinEsquema_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles cmdSinEsquema.Click

        daProductos.Fill(dsProductos, "Productos")
        Dim miCarpeta As String = System.Environment.GetFolderPath(Environment.SpecialFolder.Personal)
        dsProductos.WriteXml(miCarpeta & "\ProductosSinEsquema.XML", XmlWriteMode.IgnoreSchema)
End Sub

Código para el botón con esquema

 Private Sub cmdConEsquema_Click(ByVal sender As System.Object, _
           ByVal e As System.EventArgs) Handles cmdConEsquema.Click

        daProductos.Fill(dsProductos, "Productos")
        Dim miCarpeta As String = System.Environment.GetFolderPath(Environment.SpecialFolder.Personal)
        dsProductos.WriteXml(miCarpeta & "\ProductosConEsquema.XML", XmlWriteMode.WriteSchema)
End Sub

Nested XML File
Para mostrar el contenido de un DataSet con tablas relacionadas y guardarlos relacionados en archivo XML debemos cambiar a True la propiedad Nested del DataRelation creado.

Private Sub cmdNestedSinEsquema_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles cmdNestedSinEsquema.Click

        'Llenar el DataSet dsCatProd previamente creado
        daCat.Fill(dsCatProd, "Categorias")
        daCatProductos.Fill(dsCatProd, "Productos")  

        ' La Relación
        Dim colPadre As DataColumn
        colPadre = dsCatProd.Tables("Categorias").Columns("CategoryId")
        Dim colHijo As DataColumn
        colHijo = dsCatProd.Tables("Productos").Columns("CategoryId")
        Dim drCatProd As New DataRelation("CatProd", colPadre, colHijo)  

        'Definir Nested a True y Agregar la relación
        drCatProd.Nested = True
        dsCatProd.Relations.Add(drCatProd)
        dgCatProd.DataSource = dsCatProd.Tables("Categorias")
        dgCatProd.DataBind()

        'La carpeta donde guardar el archivo
        Dim miCarpeta As String = _
            System.Environment.GetFolderPath(Environment.SpecialFolder.Personal)
        dsCatProd.WriteXml(miCarpeta & "\CatProdSinEsquemaNested.XML", XmlWriteMode.IgnoreSchema)
End Sub


El código completo lo puedes bajar en el archivo adjunto al final del artículo, vota antes en PanoramaBox para premiar mi esfuerzo.Recuerda, compartir los conocimientos es muy gratificante, vivir de tus conocimientos mucho mas.

Suerte y A SEGUIR DESARROLLAN DO

Ing. Fernando Luque Sánchez
De Trujillo - Perú para el mundo


Espacios de nombres usados en el código de este artículo:

System.Data
System.Data.SQLClient
System.XML


Fichero con el código de ejemplo: FernandoLuque_ASPyXML.zip - (18) KB

(MD5 checksum: CFFA394BCD910514BA4341077A25DD89)


ir al índice principal del Guille