Tutorial de PERL en castellano : ¿XML? ¡Pero si es muy simple! |
Preguntas
frecuentemente preguntadas Bibliografía. Recursos Internet Ahorrando energías El cofre de la sabiduría |
Como nuestro político corrupto está en la oposición, ya no tiene tanto tiempo de corromperse, y sí mucho más tiempo de aprender PERL, así que decide poner orden en sus cuentas, y ha oido hablar de una cosa que se llama XML, así que, ya puestos, lo hace en XML, para poder trabajar fácilmente con bases de datos, y para añadir un poco de metainformación a todo lo que tiene. Su fichero de clientes, en XML, podría tener esta pinta:
<clientela>
<cliente>
<nombre>Filemon Pi</nombre>
<pasta> 404041.5</pasta>
<fecha>13:50 30/1/2000</fecha> </cliente>
<cliente>
<nombre>Pantuflo Zapatilla</nombre>
<pasta>3750 </pasta>
<fecha>13:50 23/2/2000</fecha></cliente>
<cliente>
<nombre>Superintendente Vicente</nombre>
<pasta>64041.5</pasta>
<fecha> 13:50 25/2/2000</fecha></cliente>
<cliente>
<nombre>Zape Zapatilla</nombre>
<pasta>50000</pasta>
<fecha> 13:50 22/3/2000</fecha></cliente>
<cliente>
<nombre>Zipi Zapatilla</nombre>
<pasta>5000</pasta>
<fecha> 13:50 29/3/2000</fecha></cliente>
</clientela>
.
Por supuesto, hizo un programa en PERL para pasarlo del formato anterior a este. En realidad, visto así, el XML no es tan complicado: basta con poner:
clientela
.
Esto, y algún detalle más, es lo que se denomina XML bien formado. Ya es más
fácil procesarlo que el texto anterior, sobre todo si la información que hay en
cada "campo" no siempre tiene el mismo formato, y se puede hacer simplemente con
expresiones regulares. Sin embargo, es más simple hacerlo usando el módulo que
se llama apropiadamente XML::Simple
de esta forma (xml.pl
):
1 #!/usr/bin/perl
2 use XML::Simple;
3 my $clientes = XMLin("/root/txt/tutoperl2000/clientes.xml");
4 for( @{$clientes->{cliente}} ) {
5 print "$_->{nombre} => $_->{pasta} ($_->{fecha})\n";
6 }
Cuando se dice que una cosa es simple, es que es simple: 5 líneas, que
podrían ser 3. La función XMLin
, que se importa automáticamente del
módulo XML::Simple
, toma un fichero XML, se lo traga entero, y lo
mete en una estructura de datos compuesta de hashes de hashes de hashes. En
nuestro caso, en $clientes->{cliente}
habrá un array con todos
los clientes, es decir, todos los contenidos de todas las etiquetas clientes;
pero esos contenidos estarán también analizados, y, por tanto, dentro de
$clientes->{cliente}[0]{nombre}
estará el contenido de la
etiqueta nombre
del primer cliente. En el programa, en la línea 4,
se hace un bucle sobre el array principal, y se van imprimiendo los contenidos
de las etiquetas del "segundo nivel".
|
Si cada cliente tuviera varios nombres, el contenido de la etiqueta
nombre
, en vez de ser simplemente el nombre, sería un array. En
resumen, lo que se hace es traducir el árbol en el que se convierte el fichero
XML a un árbol de matrices asociativas: cada etiqueta se convierte en una clave
de una matriz asociativa, y si hay varias etiquetas en un nivel el contenido de
esa clave es un array con todos los interiores de las etiquetas
Instalar el módulo XML::Simple
es relativamente fácil; basta con
dar la orden correspondiente desde el Perl Package Manager o desde el módulo
CPAN. Sin embargo, previamente tiene que estar instalado el programa y la
librería de expat
, que es un parser de XML. Expat se lo puede uno
bajar desde http://expat.sourceforge.net/, tanto
en fuentes como en RPMs (para RedHat).
Si quieres saber más sobre XML, hay un curso completo dentro de GeNeura:Formación, incluyendo una lección sobre parsers de XML en PERL, el único que hay en castellano en la red.
[ Preguntas frecuentemente preguntadas] [ Bibliografía.] [ Recursos Internet] [ Ahorrando energías] [ El cofre de la sabiduría] |