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

Usando XML desde PERL de la forma más simple posible

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:

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".

Una referencia que trata exclusivamente de PERL y XML es Perl & XML de Erik T. Ray, Jason McIntosh . Cubre todos los módulos y entornos de PERL y XML, tales como el AxKit, y diferentes módulos que se pueden usar, aparte del que se explica aquí.

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

Algunas notas sobre la instalación

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).

Para saber más

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]