Instalar esta herramienta es un poco complicado por lo que en esta entrada solo dare una breve introducción a lo que se puede hacer con esta herramienta y en otra entrada incluire otros ejemplos incluyendo el procedimiento de instalación.
Lo primero es tener a la mano nuestro esquema consideremos este xsd:
1: <?xml version="1.0" standalone="yes"?>
2: <xs:schema id="Peliculas"
3: targetNamespace="ProbadorConsola"
4: xmlns:xs="http://www.w3.org/2001/XMLSchema"
5: xmlns="ProbadorConsola"
6: elementFormDefault="qualified">
7: <xs:element name="Peliculas">
8: <xs:complexType>
9: <xs:choice minOccurs="0" maxOccurs="unbounded">
10: <xs:element name="Pelicula">
11: <xs:complexType>
12: <xs:sequence>
13: <xs:element name="Titulo" type="xs:string" minOccurs="0" />
14: <xs:element name="Director" type="xs:string" minOccurs="0" />
15: <xs:element name="Estrenado" type="xs:string" minOccurs="0" />
16: <xs:element name="Actores" minOccurs="0" maxOccurs="unbounded">
17: <xs:complexType>
18: <xs:sequence>
19: <xs:element name="Actor" minOccurs="0" maxOccurs="unbounded">
20: <xs:complexType>
21: <xs:sequence>
22: <xs:element name="Nombre" type="xs:string" minOccurs="0" />
23: <xs:element name="Nacimiento" type="xs:string" minOccurs="0" />
24: <xs:element name="Roles" minOccurs="0" maxOccurs="unbounded">
25: <xs:complexType>
26: <xs:sequence>
27: <xs:element name="Rol" minOccurs="0" maxOccurs="unbounded">
28: <xs:complexType>
29: <xs:sequence>
30: <xs:element name="NombrePelicula" type="xs:string" minOccurs="0" />
31: <xs:element name="NombreRol" type="xs:string" minOccurs="0" />
32: </xs:sequence>
33: </xs:complexType>
34: </xs:element>
35: </xs:sequence>
36: </xs:complexType>
37: </xs:element>
38: </xs:sequence>
39: </xs:complexType>
40: </xs:element>
41: </xs:sequence>
42: </xs:complexType>
43: </xs:element>
44: </xs:sequence>
45: </xs:complexType>
46: </xs:element>
47: </xs:choice>
48: </xs:complexType>
49: </xs:element>
50: </xs:schema>
Y después el archivo xml que vamos a utilizar:
1: <?xml version="1.0"?>
2: <Peliculas xmlns="ProbadorConsola">
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>
Linq a XSD nos genera una jerarquía de clases que nos permite manejar el xml usando datos tipeados con soporte de Intellisense y comprobación por parte del compilador, por ejemplo para listar los datos de todos los actores:
1: Peliculas peliculas = Peliculas.Load("peliculas.bak.xml");
2: var actores = from p in peliculas.Pelicula
3: from a in p.Actores
4: from actor in a.Actor
5: select actor;
6: Console.WriteLine("Todos los actores");
7: foreach(var actor in actores) {
8: Console.Out.WriteLine("Nombre: " + actor.Nombre);
9: Console.Out.WriteLine("Fecha de nacimiento: " + actor.Nacimiento);
10: }
En conclusion Linq a XSD es un complemento muy útil para el manejo de XML en .Net Framework.
Hay que tener en cuenta que el proyecto a Marzo del 2011 aún esta en etapa Beta y es mejor probar bien nuestro código para evitar errores inesperados, como sea el proyecto es muy útil y es probable que posteriormente sea incluido como parte del .Net Framework.
Para aprender más sobre Linq visita:
Lista de artículos acerca de Linq
Para aprender más sobre el uso de XML en .Net Framework visita:
Lista de artículos acerca del uso de XML en .Net Framework
No hay comentarios:
Publicar un comentario