DotNetcr.com
Si deseas hacer un intercambio de links con DotNetcr, escríbenos aquí
Recibe las actualizaciones vía RSS
Te invitamos a unirte en nuestras redes
   http://www.facebook.com/DotNetcr
   http://www.twitter.com/dotnetcr

Modos de cargar y usar XML y XSD

Por jmedina | 7/13/2005 | Visitas 22,074 | Voto 5.00
En el siguiente artículo se describen y se muestra el código de como cargar y persistir de varias formas los archivos XML y sus esquemas (XSD)
Categorías : VB.NET, XML, Windows Mobile
Es importante para todo programador saber persistir y leer archivos XML con o sin sus XSD, porque tiene importancia para muchas aplicaciones.

Un ejemplo de esto son las aplicaciones para Pocket PC, ya que muchas veces ocupamos que estos aparatos “móviles” estén desconectados de las bases de datos pero aún así podamos trabajar en las aplicaciones, persistiendo datos localmente para luego sincronizar cambios con la base de datos.

Esto también aplica para aplicaciones Windows en las cuales ocupamos que los usuarios puedan trabajar desconectados, ya sean vendedores o cualquier ejecutivo que viaje con su laptop y no siempre pueda tener conexión directa con la LAN de la empresa para poder trabajar.

Posteriormente estaré publicando artículos sobre varios modelos para poder hacer que las aplicaciones de nosotros funcionen en modo “offline” y “online”. Pero por el momento es importante que sepamos como cargar y persistir de diferentes formas los XML y sus esquemas (XSD).

Cada uno de los siguientes fragmentos de código están en VB.NET, vamos a suponer q cada fragmento está dentro el Evento Click de un botón, que es el que dispara el evento. También suponemos que el objeto ds es un DataSet y el objeto dg1 es un DataGrid, solo para desplegar los resultados de la carga de los XML.

El siguiente fragmento explica como cargar en el dataset un esquema (XSD) desde un archivo:

Private Sub cmdLoadXSDFromFile_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdLoadXSDFromFile.Click
With OpenFiledlg
.Filter = "*.xsd|*.xsd"
.ShowDialog()
If .FileName <> String.Empty Then
Me.Text = .FileName
Try
Dim ds As New DataSet
ds.ReadXmlSchema(.FileName)
dg1.DataSource = ds
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End If
End With
End Sub


Tenemos un OpenFileDialog el cuál nos muestra la ruta seleccionada por el usuario donde se encuentra el archivo XML a cargar, desde el dataset ds llamamos al método ReadXmlSchema y le pasamos por parámetro la ruta del archivo a cargar.

El siguiente ejemplo es parecido al anterior pero en vez de cargar el esquema desde un archivo lo hacemos desde un StreamReader:

Private Sub cmdLoadFromStream_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdLoadFromStream.Click
With OpenFiledlg
.Filter = "*.xsd|*.xsd"
.ShowDialog()
If .FileName <> String.Empty Then
Me.Text = .FileName
Dim myStreamReader As System.IO.StreamReader = Nothing
Try
myStreamReader = New System.IO.StreamReader(.FileName)
Dim ds As New DataSet
ds.ReadXmlSchema(myStreamReader)
dg1.DataSource = ds
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End If
End With
End Sub


Ahora vamos a aprender como persistir al disco un esquema sacado de un dataset por medio de un StreamWriter:


Private Sub cmdWrite2Stream_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdWrite2Stream.Click
With SaveFiledlg
.Filter = "XSD|*.xsd"
.ShowDialog()
If .FileName <> String.Empty Then
Me.Text = .FileName
Dim myStreamwriter As System.IO.StreamWriter = Nothing

Try
myStreamwriter = New System.IO.StreamWriter(.FileName)

Dim ds As DataSet = Me.dg1.DataSource
ds.WriteXml(myStreamwriter, XmlWriteMode.WriteSchema)
myStreamwriter.Flush()
myStreamwriter.Close()
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End If
End With
End Sub


A continuación vamos a aprender a persistir un archivo XML pero guardando todas sus propiedades, ya sea si una fila es tipo inserted, update o deleted, para hacer esto guardamos el xml con una propiedad especial que se llama DiffGram, esto nos permite que no solo se guarde el XML sino que también se guarden las propiedades correspondientes a cada fila de información, ya sea q hayan sido insertadas, modificadas o eliminadas.

Private Sub cmdWriteDifgram_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdWriteDifgram.Click
With SaveFiledlg
.Filter = "XML|*.xml"
.ShowDialog()
If .FileName <> String.Empty Then
Me.Text = .FileName
Dim myStreamwriter As System.IO.StreamWriter = Nothing
Try
myStreamwriter = New System.IO.StreamWriter(.FileName)
' Dim ds As DataSet = Me.dg1.DataSource
Me.dg1.DataSource.WriteXml(myStreamwriter, XmlWriteMode.DiffGram)
myStreamwriter.Flush()
myStreamwriter.Close()
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End If
End With
End Sub


El siguiente ejemplo nos muestra como cargar un XML y un XSD, para así aplicarle ese esquema al XML y cargarlo en el dataset:
Private Sub LadXSDyXML_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LoadXSDyXML.Click
Dim file, ezquema As String

With OpenFiledlg
.Filter = "*.xsd|*.xsd"
.Title = "Indique el esquma XSD"
.ShowDialog()
If .FileName <> String.Empty Then
ezquema = .FileName
Else
Exit Sub
End If
.Title = "Archivo de datos XML"
.Filter = "XML|*.xml"
.ShowDialog()
If .FileName <> String.Empty Then
file = .FileName
Else
Exit Sub
End If
Try
Dim ds As New DataSet
ds.ReadXmlSchema(ezquema)
ds.ReadXml(file, XmlReadMode.Auto)
dg1.DataSource = ds
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End With
End Sub


El siguiente es un ejemplo muy simple de como persistir un dataset, pero con este método solo guardamos la información en un XML obviando las propiedades que se pueden guardar utilizando el modo DiffGram, anteriormente mencionado:

Private Sub cmdPersistirDS_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdPersistirDS.Click
Dim d As DataSet = dg1.DataSource
With SaveFiledlg
.Filter = "XML|*.xml"
.ShowDialog()
If .FileName <> String.Empty Then
d.WriteXml(.FileName)
End If
End With
End Sub


El último ejemplo es parecido al de arriba pero solo q en vez de guardar el XML guardamos el XSD:

Private Sub cmdPersistirXSD_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdPersistirXSD.Click
Dim d As DataSet = dg1.DataSource
With SaveFiledlg
.Filter = "XSD|*.xsd"
.ShowDialog()
If .FileName <> String.Empty Then
d.WriteXmlSchema(.FileName)
End If
End With
End Sub


Con eso los dejo, hay muchas otras formas de hacerlo, pero eso sirve como base para cualquier proyecto con XML.
Area de Comentarios
Por royrojas - Fecha: 2005/07/13 08:18 PM
excelente artículo, gracias por tu colaboración en DotNetcr.com
Por Anónimo - Fecha: 2005/08/04 03:30 PM
Hola, mi nombre es Percy Reyes, y me parece interesante tu artículo. Yo publico más que todo el sitio del Guille, alli puedes encontrarme.

Felitaciones !!!

bigpercynet@hotmail.com
Por Anónimo - Fecha: 2006/01/12 04:25 AM
excelente artículo,
http://www.antivirus-software.es
Por Anónimo - Fecha: 2006/01/31 11:20 AM
Hola, excelente articulo, conoces la forma de hacer lo mismo en VB6?
Por Anónimo - Fecha: 2006/02/22 04:33 AM
claro, conciso y preciso..
Gracias
Por Anónimo - Fecha: 2006/08/21 08:50 AM
Muy bueno, me la ha puesto mastil. Muchas gracias
Por Anónimo - Fecha: 2006/10/13 03:17 PM
Muy buen articulo man , Saludos desde Mexico!!!
Por Anónimo - Fecha: 2007/05/15 02:29 PM
yea!!! chido, me servira de mucho :p
Por Anónimo - Fecha: 2012/07/18 08:24 PM
Thanks you There are some interesting potnis in time in this article but I don81ft know if I see all of them center to heart. There is some validity but I will take hold opinion until I look into it further. Good article , thanks and we want more! Added to FeedBur
Por Anónimo - Fecha: 2012/07/20 05:39 AM
J5jDb3 , [url=http://htxwbxtblbpf.com/]htxwbxtblbpf[/url], [link=http://wvmstjfqpksm.com/]wvmstjfqpksm[/link], http://scdwasvontnh.com/
Por Anónimo - Fecha: 2012/07/20 09:49 PM
jgIBzc , [url=http://wrfsqrwuazud.com/]wrfsqrwuazud[/url], [link=http://lzzgiddwnegy.com/]lzzgiddwnegy[/link], http://awwkxhiojnzf.com/
Por Anónimo - Fecha: 2015/12/17 04:47 PM
I want to show my affection for your kesindns for those who need help on that content. Your special dedication to passing the message all through appeared to be unbelievably insightful and have without exception permitted men and women much like me to realize their ambitions. Your own valuable guidelines means much a person like me and further more to my colleagues. Regards; from all of us.
Por Anónimo - Fecha: 2015/12/19 02:52 AM
Thank you for your comment. I tried to open it in Internet Explorer 8 and ieednd it didn't work correctly. I added another post where you do not need to click a link, so that problem should be solved. http://enslqsor.com [url=http://snjsrny.com]snjsrny[/url] [link=http://gdjdmgwm.com]gdjdmgwm[/link]
Por Anónimo - Fecha: 2015/12/20 02:24 PM
I don't know if you can automatically add those pituercs. you can always add them later via edit once the recipe(s) are loaded via edit. http://cnfonqmsc.com [url=http://bjbqmqsvrm.com]bjbqmqsvrm[/url] [link=http://svbtpo.com]svbtpo[/link]
Ingrese su Comentario
Comentario
Para poder votar debe estar registrado en DotNetcr.com
Solo queda registrado el primer voto enviado
Voto


Últimos Recursos
ricardo leppe t
pedrojavier
CALIN
willipinru
richard
ragomez
PER 238
MEX 236
CRI 188
COL 118
ESP 105
ARG 88