sábado, abril 20, 2024

Como leer un archivo XML en .NET (VB & C#)

Como primer paso debemos tener un archivo XML que nos sirva para probar nuestra aplicación. Podemos crearlo con el código detallado abajo con el nombre de XMLPrueba.xml. Debemos crear este archivo en un editor como el NotePad, ya que necesitamos un archivo sin caracteres extraños.

<?xml version="1.0" encoding="UTF-8"?>
<usuarios>
    <name codigo="mtorres">
        <nombre>Maria </nombre>
        <apellido>Torres </apellido>
    </name>
    <name codigo="cortiz">
        <nombre>Carlos </nombre>
        <apellido>Ortiz </apellido>
    </name>
</usuarios>

Luego de tener nuestro archivo XML creado podremos crear nuestro código.

Utilizando el XMLTextReader

Este formato es muy sencillo y para leer el achivo debemos hacerlo de forma secuencial, línea por línea.

C#

using System.IO;
using System.Xml;
class ParsingUsingXmlTextReader {
    
    static void Main() {
        XmlTextReader m_xmlr;
        // Creamos el XML Reader
        m_xmlr = new XmlTextReader("C:XMLPrueba.xml");
        // Desabilitamos las lineas en blanco,
        // ya no las necesitamos
        m_xmlr.WhiteSpaceHandling = WhiteSpaceHandling.NONE;
        // Leemos el archivo y avanzamos al tag de usuarios
        m_xmlr.Read();
        // Leemos el tag usuarios
        m_xmlr.Read();
        // Creamos la secuancia que nos permite
        // leer el archivo
        while (!m_xmlr.EOF) {
            // Avanzamos al siguiente tag
            m_xmlr.Read();
            // si no tenemos el elemento inicial
            // debemos salir del ciclo
            if (!m_xmlr.IsStartElement()) {
                break;
            }
            
            // Obtenemos el elemento codigo
            object mCodigo = m_xmlr.GetAttribute("codigo");
            // Read elements firstname and lastname
            m_xmlr.Read();
            // Obtenemos el elemento del Nombre del Usuario
            object mNombre = m_xmlr.ReadElementString("nombre");
            // Obtenemos el elemento del Apellido del Usuario
            object mApellido = m_xmlr.ReadElementString("apellido");
            // Escribimos el resultado en la consola,
            // pero tambien podriamos utilizarlos en
            // donde deseemos
            Console.WriteLine("Codigo usuario: " + mCodigo
                              + " Nombre: " + mNombre
                              + " Apellido: " + mApellido);
            Console.Write("\r\n");
        }
        
        // Cerramos la lactura del archivo
        m_xmlr.Close();
    }
}

VB

Imports System.IO
Imports System.Xml
Class ParsingUsingXmlTextReader
    
    Private Shared Sub Main()
        Dim m_xmlr As XmlTextReader
        ' Creamos el XML Reader
        m_xmlr = New XmlTextReader("C:XMLPrueba.xml")
        ' Desabilitamos las lineas en blanco,
        ' ya no las necesitamos
        m_xmlr.WhiteSpaceHandling = WhiteSpaceHandling.NONE
        ' Leemos el archivo y avanzamos al tag de usuarios
        m_xmlr.Read
        ' Leemos el tag usuarios
        m_xmlr.Read
        ' Creamos la secuancia que nos permite
        ' leer el archivo
        
        While Not m_xmlr.EOF
            ' Avanzamos al siguiente tag
            m_xmlr.Read
            ' si no tenemos el elemento inicial
            ' debemos salir del ciclo
            If Not m_xmlr.IsStartElement Then
                Exit While
            End If
            
            ' Obtenemos el elemento codigo
            Dim mCodigo As Object = m_xmlr.GetAttribute("codigo")
            ' Read elements firstname and lastname
            m_xmlr.Read
            ' Obtenemos el elemento del Nombre del Usuario
            Dim mNombre As Object = m_xmlr.ReadElementString("nombre")
            ' Obtenemos el elemento del Apellido del Usuario
            Dim mApellido As Object = m_xmlr.ReadElementString("apellido")
            ' Escribimos el resultado en la consola,
            ' pero tambien podriamos utilizarlos en
            ' donde deseemos
            Console.WriteLine("Codigo usuario: " + mCodigo
                              + " Nombre: " + mNombre
                              + " Apellido: " + mApellido);
            Console.Write(vbCrLf)
            
        End While
        
        ' Cerramos la lactura del archivo
        m_xmlr.Close
    End Sub
End Class

Utilizando el XmlDocument

Este formato es mas complejo y nos permite recorrer los nodos sin tener que utilizar una lectura secuencial. Definitivamente este formato es más eficiente que el anterior principalmente para documentos muy grandes.

C#

using System.IO;
using System.Xml;
class ParsingUsingXmlDocument {
    
    static void Main() {
        try {
            XmlDocument m_xmld;
            XmlNodeList m_nodelist;
            XmlNode m_node;
            Creamos;
            el;
            "XML Document";
            m_xmld = new XmlDocument();
            // Cargamos el archivo
            m_xmld.Load("C:XMLPrueba.xml");
            // Obtenemos la lista de los nodos "name"
            m_nodelist = m_xmld.SelectNodes("/usuarios/name");
            // Iniciamos el ciclo de lectura
            foreach (m_node in m_nodelist) {
                // Obtenemos el atributo del codigo
                object mCodigo = m_node.Attributes.GetNamedItem("codigo").Value;
                // Obtenemos el Elemento nombre
                object mNombre = m_node.ChildNodes.Item[0].InnerText;
                // Obtenemos el Elemento apellido
                object mApellido = m_node.ChildNodes.Item[1].InnerText;
                // Escribimos el resultado en la consola,
                // pero tambien podriamos utilizarlos en
                // donde deseemos
                Console.Write(("Codigo usuario: " 
                                + (mCodigo + (" Nombre: " 
                                + (mNombre + (" Apellido: " + mApellido))))));
                Console.Write("\r\n");
            } 
        }
        catch (Exception ex) {
            // Error trapping
            Console.Write(ex.ToString());
        }
    }
}

VB

Imports System.IO
Imports System.Xml
Class ParsingUsingXmlDocument
    
    Private Shared Sub Main()
        Try 
            Dim m_xmld As XmlDocument
            Dim m_nodelist As XmlNodeList
            Dim m_node As XmlNode
            Creamos
            el
            "XML Document"
            m_xmld = New XmlDocument
            ' Cargamos el archivo
            m_xmld.Load("C:XMLPrueba.xml")
            ' Obtenemos la lista de los nodos "name"
            m_nodelist = m_xmld.SelectNodes("/usuarios/name")
            ' Iniciamos el ciclo de lectura
            For Each in As m_node In m_nodelist
                ' Obtenemos el atributo del codigo
                Dim mCodigo As Object = m_node.Attributes.GetNamedItem("codigo").Value
                ' Obtenemos el Elemento nombre
                Dim mNombre As Object = m_node.ChildNodes.Item(0).InnerText
                ' Obtenemos el Elemento apellido
                Dim mApellido As Object = m_node.ChildNodes.Item(1).InnerText
                ' Escribimos el resultado en la consola,
                ' pero tambien podriamos utilizarlos en
                ' donde deseemos
                Console.Write(("Codigo usuario: "  _
                                + (mCodigo + (" Nombre: "  _
                                + (mNombre + (" Apellido: " + mApellido))))))
                Console.Write(""& vbCrLf)
            Next
        Catch ex As Exception
            ' Error trapping
            Console.Write(ex.ToString)
        End Try
        
    End Sub
End Class

Roy Rojas
Roy Rojashttp://www.dotnetcr.com
Con más de 20 años de experiencia en programación, experto en lenguajes .NET, VB, C#, ASP.NET, Xamarin, XCode, DBA en SQL Server. Creador de dotnetcr.com, sitio web para programadores en español. royrojas.com | dotnetcr.com | GitHub
Roy Rojas
Roy Rojashttp://www.dotnetcr.com
Con más de 20 años de experiencia en programación, experto en lenguajes .NET, VB, C#, ASP.NET, Xamarin, XCode, DBA en SQL Server. Creador de dotnetcr.com, sitio web para programadores en español. royrojas.com | dotnetcr.com | GitHub