.NET: Leer un XML en C#
El otro día hablamos de como crear y escribir un archivo XML en C#. Pues bien, hoy nos toca hacer lo contrario, leerlo.
La forma de hacerlo es sencilla, utilizaremos el mismo XML que utilizamos en el post anterior, usease, este:
<XClub>
<Pelicula>
<Data Titulo="Garganta Profunda(Deep Throat)" Director="Gerard Damiano" />
</Pelicula>
</XClub>
Para ello no tenemos más que recorrer nodo a nodo el XML e ir leyendo lo que nos interese:
System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
doc.Load(pRutaGuardarXML);
System.Xml.XmlNode primerHijo = doc.SelectSingleNode("./descendant::XClub");
System.Xml.XmlNodeList ListaPelicula = primerHijo.SelectNodes("./descendant::Pelicula");
foreach (System.Xml.XmlNode UnaPeli in ListaPelicula)
{
System.Xml.XmlNodeList DatosPelicula = UnaPeli.SelectNodes("./descendant::Data");
foreach (System.Xml.XmlNode Datos in DatosPelicula)
{
string Titulo = Datos.Attributes["Titulo"].InnerText;
string Director = Datos.Attributes["Director"].InnerText;
}
}
Como veis, primero me creo un objeto System.Xml.XmlDocument en el que cargo el XML con el método Load(string URL). Y como me conozco la estructura del XML, la voy recorriendo y meto los datos que me interesan en un par de variables. Naturalmente, en vez de variables, tendréis que decidir donde almacenar los datos, pero eso ya depende de vuestra aplicación y de como lo estéis desarrollando, que yo, ya ahí, no me meto ;)
¿Que qué es el ./descendant::Pelicula? Os habéis fijau, eh? jiji. Pues es la forma de decirle que recorra el interior del nodo que le indiquemos de forma recursiva y me coja todos los nodos dentro de ese nodo de un nombre determinado. En el primer caso le indicamos que me coja el nodo XClub (es el nodo padre, por lo que sólo hay un nodo con ese nombre) que halla dentro del objeto System.Xml.XmlDocument doc poniéndolos en el objeto System.Xml.XmlNode primerHijo, y luego dentro de este, usea, en el nodo XClub, que me coja todos los nodos Pelicula, poniéndolos en el objeto System.Xml.XmlNodeList ListaPelicula, la cual recorreremos para… bueno, creo que ya cogéis por donde va el asunto.
Dudas, preguntas, bugs… en comentarios ;)

