domingo, octubre 17, 2021

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 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

Redes Sociales

2,736FansMe gusta
326SeguidoresSeguir

Popular esta semana

SQL Server - Merge

MERGE en SQL Server para Insert, Delete y Update con dos tablas

Ejemplo práctico usando MERGE para sincronizar dos tablas, Insert, Update y Delete en un solo query. Válido para SQL SERVER 2008 o superior.

Calcular la distancia entre dos puntos geográficos en SQL Server

En este ejemplo mostramos como calcular la distancia en metros o kilómetros entre dos puntos geográficos, por latitud y longitud. El resultado lo obtenemos en metros o kilómetros.

SQL Server: Error 3414, servicio no inicia

El error 3414 se produce generalmente cuando el motor de la base de datos SQL Server sufre algún evento imprevisto. Aquí lo solucionamos.

Últimos artículos

Flutter - Instagram Clone App

Instagram Clone App con Flutter

Marvin Stanley Valenzuela nos comparte un reto y genialidad a la vez, excelente práctica de la que podemos aprender mucho, diseñó en...

¿Cómo agregar una IP adicional en una VM Ubuntu en Azure?

Lo más común al momento de crear y configurar un nuevo servidor es que a este le asigne un solo IP, pero...
flutter one year

Después de un año con Flutter, esto es lo que aprendí

La historia comenzó cuando un día desperté pensando en tener un nuevo proyecto personal. Me dije a mí misma que hay muchas...
promocionar app

Cómo promocionar gratis tu app usando tappx

Como todos los que me siguen y mis redes sociales sabrán, recientemente lancé mi primera aplicación, pero más allá del desafío tecnológico de...