XPath es una tecnología que nos permite encontrar información en un documento
XML,
.Net Framework tiene integrada un
API muy sencilla de usar que nos permite usar
XPath en nuestras aplicaciones.
Aquí les muestro un ejemplo sencillo del uso de esta
API.
Las clases principales son
XPathDocument que nos permite cargar el documento a utilizar,
XPathNavigator que nos permite realizar las consultas deseadas y
XPathIterator que nos trae los resultados de la consulta.
También existe la interface
IXPathNavigable que al ser implementada nos permite usar otro tipo de fuentes de datos que no sean
XML.
En este ejemplo no explico detalles sobre
XPath puesto que este es un blog de
.Net y no de
XML pero si quieres saber mas acerca de esta tecnología puedes visitar el tutorial de
XPath en
http://www.w3schools.com/XPath/default.asp.
Consideremos el siguiente xml:
1: <?xml version="1.0"?>
2: <Peliculas>
3: <Pelicula>
4: <Titulo>Mazinger</Titulo>
5: <Director>Jackie chan</Director>
6: <Estrenado>1975-03-19T00:00:00</Estrenado>
7: <Actores>
8: <Actor>
9: <Nombre>John Wayne</Nombre>
10: <Nacimiento>1915-10-23T00:00:00</Nacimiento>
11: <Roles>
12: <Rol>
13: <NombrePelicula>Mazinger</NombrePelicula>
14: <NombreRol>Estrella</NombreRol>
15: </Rol>
16: </Roles>
17: </Actor>
18: </Actores>
19: </Pelicula>
20: <Pelicula>
21: <Titulo>Terminator</Titulo>
22: <Director>James Cameron</Director>
23: <Estrenado>1985-02-14T00:00:00</Estrenado>
24: <Actores>
25: <Actor>
26: <Nombre>Arnold</Nombre>
27: <Nacimiento>1953-10-11T00:00:00</Nacimiento>
28: <Roles>
29: <Rol>
30: <NombrePelicula>Terminator</NombrePelicula>
31: <NombreRol>Protagonista</NombreRol>
32: </Rol>
33: <Rol>
34: <NombrePelicula>Terminator</NombrePelicula>
35: <NombreRol>Enemigo</NombreRol>
36: </Rol>
37: </Roles>
38: </Actor>
39: <Actor>
40: <Nombre>Linda Hamilton</Nombre>
41: <Nacimiento>1972-08-12T00:00:00</Nacimiento>
42: <Roles>
43: <Rol>
44: <NombrePelicula>Terminator</NombrePelicula>
45: <NombreRol>Protagonista</NombreRol>
46: </Rol>
47: <Rol>
48: <NombrePelicula>Terminator</NombrePelicula>
49: <NombreRol>Perseguida</NombreRol>
50: </Rol>
51: </Roles>
52: </Actor>
53: </Actores>
54: </Pelicula>
55: </Peliculas>
Para encontrar todos los actores usaríamos este código:
1: XPathDocument peliculas = new XPathDocument("peliculas.bak.xml");
2: XPathNavigator pelNav = peliculas.CreateNavigator();
3: XPathNodeIterator actoresIt = pelNav.Select("//Actor");
4: Console.WriteLine("Todos los actores");
5: while(actoresIt.MoveNext()) {
6: Console.WriteLine("Nombre: " + actoresIt.Current.SelectSingleNode("Nombre").Value);
7: Console.WriteLine("Fecha de nacimiento: " + actoresIt.Current.SelectSingleNode("Nacimiento").Value);
8: }
Cabe mencionar que el
API es de solo lectura por lo que podemos consultar información pero no modificarla.