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.
Deja una respuesta