lunes, 18 de enero de 2010

Leer un archivo XML desde VB.net - modo consola

Supongamos que tenemos la siguiente estructura dentro de un archivo XML:

<?xml version="1.0" encoding="UTF-8"?>
    <songs>
       <song id="254f84d" artist="Chris Cornell" title="Scream"/>
       <song id="6747116" artist="Lost Prophets" title="I Don't Know"/>
       <song id="254f84d" artist="Inner Circle" title="Bad Boys"/>
       <song id="125a8bd" artist="Slipknot" title="Dead Memories"/>
       <song id="1e7c9d5" artist="VAST" title="Don't Take Your Love Away"/>
    </songs>
 
...y queremos acceder a los atributos de todos los nodos llamados song, estos atributos son id, artist y title.
Para mostrar como se lográ esto desde VB.NET, primero creamos un nuevo proyecto del tipo Console Application o Aplicación de Consola.
En la primera linea añadimos:

Imports System.Xml
 
...esto nos permitira hacer uso de las Clases XmlDocument, XmlNodeList, XmlNode y XmlAttributeCollection.
Dentro de nuestro Main() agregamos:

Dim Xml As XmlDocument
    Dim NodeList As XmlNodeList
    Dim Node As XmlNode
    Try
        Xml = New XmlDocument()
        Xml.Load("C:\xmlfile.xml")
        NodeList = Xml.SelectNodes("/songs/song")
        Console.WriteLine("Nodos por Leer: " & NodeList.Count & vbNewLine)
 
        For Each Node In NodeList
            With Node.Attributes
                Console.WriteLine("ID: " & .GetNamedItem("id").Value)
                Console.WriteLine("Artist: " & .GetNamedItem("artist").Value)
                Console.WriteLine("Title: " & .GetNamedItem("title").Value)
                Console.Write(vbNewLine)
            End With
        Next
 
    Catch ex As Exception
        Console.WriteLine(ex.GetType.ToString & vbNewLine & ex.Message.ToString)
    Finally
        Console.Read()
    End Try
  • El método Load de XmlDocument nos permite cargar el XML desde un archivo que se encuentre en nuestro PC o en Internet; pueden hacer la prueba con este archivo. Si en lugar del método Load usaramos LoadXml, este nos permitiría cargar el XML desde una cadena de texto
  • El método SelectNodes de XmlDocument selecciona una lista de nodos que coinciden con la expresión XPath
  • La propiedad Count de XmlNodeList obtiene el número de nodos que fueron seleccionados con SelectNodes
  • La propiedad Attributes de XmlNode obtiene un objeto XmlAttributeCollection que contiene los atributos de un nodo.
  • El método GetNamedItem de XmlAttributeCollection nos permite acceder a los atributos de un nodo usando el nombre del atributo
  • Una captura del Código

Resultado:

XmlDocument1

1 comentario:

  1. Muy bien explicado. Me parecía imposible leer un xml con lo sencillo que lo has mostrado

    ResponderEliminar