Buscar este blog

miércoles, 9 de febrero de 2011

Leyendo y Escribiendo XML con Linq en Visual Basic

Escribir xml en Visual Basic es tan fácil como se dice simplemente se escribe el xml tal cual en el código de Visual Basic y el compilador convierte el árbol completo en una instancia de la clase XElement:


   1:  Dim  xml As XElement =  <Root> _
   2:      <Elemento /> _
   3:  <Root>

Si necesitamos incluir en el xml el valor de una variable o cualquier código podemos usar los tags <%= >:


   1:  Dim a As String = "Hola"
   2:  Dim  xml As XElement =  <Root> _
   3:      <Elemento><%= a %></Elemento> _
   4:  <Root>

Escribir xml también es sencillo pero no tan directo.
En este ejemplo uso Linq para crear XML desde un árbol de objetos y después poder leer de nuevo el XML con Linq y crear de nuevo los objetos.
Por supuesto para correr los ejemplos hay que crear los tipos de datos necesarios, todas las colecciones son de tipo List(Of T)
Escribir (Linq a XML):


   1:  Dim peliculas As List(Of Pelicula)
   2:  Dim source As New PeliculaTA
   3:  peliculas = source.Retrieve()
   4:  Dim xmlArch As XElement = _
   5:   <Peliculas>
   6:       <%= From m In peliculas _
   7:           Select _
   8:           <Pelicula>
   9:               <Titulo><%= m.Titulo %></Titulo>
  10:               <Director><%= m.Director %></Director>
  11:               <Estrenado><%= m.Estrenado %></Estrenado>
  12:               <Actores>
  13:                   <%= From a In m.Actores _
  14:                       Select _
  15:                       <Actor>
  16:                           <Nombre><%= a.Nombre %></Nombre>
  17:                           <Nacimiento><%= a.Nacimiento %></Nacimiento>
  18:                           <Roles>
  19:                               <%= From r In a.Roles _
  20:                                   Select _
  21:                                   <Rol>
  22:                                       <NombrePelicula><%= r.Pelicula %></NombrePelicula>
  23:                                       <NombreRol><%= r.NombreRol %></NombreRol>
  24:                                   </Rol> _
  25:                               %>
  26:                           </Roles>
  27:                       </Actor> _
  28:                   %>
  29:               </Actores>
  30:           </Pelicula> _
  31:       %>
  32:   </Peliculas>
  33:  File.WriteAllText("peliculas.xml", xmlArch.ToString())

Leer (XML a Linq):


   1:  Dim xmlArch As XElement = XElement.Load("peliculas.xml")
   2:  Dim peliculas = From m In xmlArch...<Pelicula> _
   3:   Select New Pelicula With { _
   4:    .Titulo = m.<Titulo>.Value _
   5:    , .Director = m.<Director>.Value _
   6:    , .Estrenado = m.<Estrenado>.Value _
   7:    , .Actores = (From c In m...<Actor> _
   8:    Select New Actor With { _
   9:   .Nombre = c.<Nombre>.Value _
  10:   , .Nacimiento = c.<Nacimiento>.Value _
  11:   , .Roles = (From r In c...<Rol> _
  12:   Select New Rol With { _
  13:   .Pelicula = r.<NombrePelicula>.Value _
  14:   , .NombreRol = r.<NombreRol>.Value _
  15:   }).ToList() _
  16:   }).ToList() _
  17:   }

El resultado de el último ejemplo es un Enumerable(Of Pelicula) el cual hay que recorrer por ejemplo con For Each para obtener resultados.

Para aprender mas sobre Linq visita:
Lista de artículos acerca de Linq

Para aprender más sobre el uso de XML en .Net Framework visita:
Lista de artículos acerca del uso de XML en .Net Framework

No hay comentarios:

Publicar un comentario