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.