Como leer un XML en C#

Hola a todos, hoy os voy a explicar como podemos leer un XML en C#.

En C# para el tema de XML, tenemos una clase para tratar XML, tanto como leer y escribir. Esta clase es XmlDocument.

El xml que vamos a tratar es este:


<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<concesionario>
    <coches>
        <coche matricula="1111AAA">
            <marca>AUDI</marca>
            <precio>30000</precio>
        </coche>
        <coche matricula="2222BBB">
            <marca>SEAT</marca>
            <precio>10000</precio>
        </coche>
        <coche matricula="3333CCC">
            <marca>BMW</marca>
            <precio>20000</precio>
        </coche>
        <coche matricula="4444DDD">
            <marca>TOYOTA</marca>
            <precio>10000</precio>
        </coche>
    </coches>
</concesionario>

Lo primero es crear una instancia de XmlDocument:

XmlDocument doc = new XmlDocument();

Ahora debemos cargar un xml:


doc.Load("concesionario.xml");

La ruta del fichero esta en la carpeta bin/Debug de nuestro proyecto.

 

Para empezar a recorrer los hijos del nodo raiz (concesionario), es decir, el nodo coches.


foreach (XmlNode n1 in doc.DocumentElement.ChildNodes)
{
    
}

Si el nodo hijo tiene mas elementos (hijos), recorremos los hijos de este nodo.

f (n1.HasChildNodes)
{
    foreach (XmlNode n2 in n1.ChildNodes)
    {
        
    }
}

Ahora mismo, estamos en el nodo coche, que tiene un atributo llamado matricula, para obtenerlo lo hacemos con Attributes:


String matricula = n2.Attributes["matricula"].Value;
Console.WriteLine("Matricula: " + matricula);

El nodo coche, también tiene mas nodos, por lo que los recorremos.


foreach (XmlNode n3 in n2.ChildNodes)
{
    Console.WriteLine(n3.Name + " " + n3.InnerText);
}

Con la propiedad Name nos da el nombre de la etiqueta e InnerText devuelve el texto interior.

 

Si ejecutamos el codigo, veremos esto:

Os dejo el ejemplo completo:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;

namespace XML1
{
    class Program
    {
        static void Main(string[] args)
        {
            // Creo la instancia de xmldocument
            XmlDocument doc = new XmlDocument();
            // carga el xml
            doc.Load("concesionario.xml");
            // Recorro los hijos del nodo concesionario
            foreach (XmlNode n1 in doc.DocumentElement.ChildNodes)
            {
                // Si tiene nodos, recorro sus hijos
                if (n1.HasChildNodes)
                {
                    foreach (XmlNode n2 in n1.ChildNodes)
                    {
                        // Obtengo el atributo matricula del nodo coche
                        String matricula = n2.Attributes["matricula"].Value;
                        Console.WriteLine("Matricula: " + matricula);

                        // Nodos hijos del coche
                        foreach (XmlNode n3 in n2.ChildNodes)
                        {
                            Console.WriteLine(n3.Name + " " + n3.InnerText);
                        }
                    }
                }
            }
            Console.ReadLine();


        }
    }
}

Os dejo un video explicando el proceso:

Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.

Compartir

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *