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] |