Cómo parsear datos XML de manera sencilla con Perl

Con el aumento del uso de XML en los sitios web, es cada vez más importante que los desarrolladores web sepan cómo analizar datos XML y convertirlos en diferentes formatos. Anteriormente, había dos formas de hacer esto: configurar manejadores de devolución de llamada que se invocan cuando se reconoce un tipo de elemento específico (SAX) o crear un árbol de documentos XML y utilizar métodos de navegación para acceder a fragmentos de contenido individuales (DOM).

Ambos métodos tenían una cosa importante en común: no eran fáciles de implementar, especialmente para principiantes en XML. Lo que los desarrolladores web realmente necesitaban era algo que hiciera que el análisis de datos XML fuera tan simple como iterar sobre una matriz o leer un archivo.

Aquí es donde entra en juego el módulo Perl muy útil llamado XML::Simple. Este módulo elimina el tedio de analizar datos XML, haciendo que el proceso sea más fácil de lo que nunca pensaste posible. Al finalizar este artículo, sabrás cómo convertir los datos XML en una variable Perl y también cómo crear un archivo XML a partir de un hash Perl.

Índice de Contenido
  1. Instalación
  2. Análisis básico de XML
  3. Manejo de árboles de documentos multinivel
  4. Manejo de atributos
  5. Controlando el comportamiento del analizador
  6. Convirtiendo estructuras Perl en XML

Instalación

XML::Simple funciona mediante el análisis de un archivo XML y devolviendo los datos dentro de él como una referencia de hash Perl. Dentro de este hash, los elementos del archivo XML original juegan el papel de claves y los CDATA entre ellos toman el papel de valores. Una vez que XML::Simple ha procesado un archivo XML, el contenido dentro del archivo XML se puede recuperar utilizando la notación estándar de matriz Perl.

Escrito enteramente en Perl, XML::Simple se implementa como una capa de API sobre el módulo XML::Parser y actualmente es mantenido por Grant McLean. Viene incluido con la mayoría de las distribuciones recientes de Perl, pero si no lo tienes, la forma más fácil de obtenerlo es a través de CPAN. Se proporcionan instrucciones de instalación detalladas en el archivo de descarga, pero la forma más sencilla de instalarlo es utilizando el shell de CPAN:

shell> perl -MCPAN -e shell
cpan> install XML::Simple

Cómo definir y utilizar tipos de datos definidos por el usuario (UDT) en Visual Basic

Si utilizas el shell de CPAN, las dependencias se descargarán automáticamente para ti (a menos que hayas configurado el shell para no descargar módulos dependientes). Si descargas e instalas manualmente el módulo, es posible que necesites descargar e instalar el módulo XML::Parser antes de poder instalar XML::Simple. Este artículo utiliza la versión 2.12 de XML::Simple.

Análisis básico de XML

Una vez que tienes instalado el módulo, crea el siguiente archivo XML y llámalo "data.xml":

<?xml version=’1.0′?>
<employee>
<name>John Doe</name>
<age>43</age>
<sex>M</sex>
<department>Operations</department>
</employee>

Y luego escribe el siguiente script en Perl, que lo analiza utilizando el módulo XML::Simple:

#!/usr/bin/perl

# utilizar el módulo

Cómo crear un portal empresarial efectivo para tu negocio

use XML::Simple;

use Data::Dumper;

# crear objeto

$xml = new XML::Simple;

# leer archivo XML

$data = $xml->XMLin("data.xml");

Cómo utilizar el archivo Global.asax en tu aplicación ASP.NET

# imprimir salida

print Dumper($data);

Utilizar XML::Simple es, de hecho, muy sencillo. Cada objeto de la clase XML::Simple expone dos métodos, XMLin() y XMLout(). El método XMLin() lee un archivo o una cadena XML y lo convierte en una representación Perl; el método XMLout() realiza el proceso inverso, leyendo una estructura Perl y devolviéndola como una instancia de documento XML. El script de arriba utiliza el método XMLin() para leer el archivo "data.xml" creado anteriormente y guarda el resultado procesado en $data. El contenido de $data se muestra luego con el módulo Data::Dumper de Perl.

Cuando ejecutes este script, verás lo siguiente:

$VAR1 = {
'department' => 'Operations',
'name' => 'John Doe',
'sex' => 'M',
'age' => '43'
};

Como puedes ver, cada elemento y su contenido asociado se han convertido en un par clave-valor de un array asociativo Perl. Ahora puedes acceder a los datos XML como se muestra en la siguiente revisión del script anterior:

Cómo utilizar la colección en Visual Basic 6: Guía completa

#!/usr/bin/perl

# utilizar el módulo

use XML::Simple;

# crear objeto

$xml = new XML::Simple;

# leer archivo XML

Cuándo usar la palabra clave volatile en Java para controlar el acceso a datos en hilos

$data = $xml->XMLin("data.xml");

# acceder a los datos XML

print "$data->{name} tiene $data->{age} años y trabaja en el departamento de $data->{department}\n";

Aquí está la salida:

John Doe tiene 43 años y trabaja en el departamento de Operations

Ahora veamos cómo usar XML::Simple para manejar documentos XML más complejos.

Cómo usar Command Line Interface (CLI) para analizar argumentos de línea de comandos en Java

Manejo de árboles de documentos multinivel

La facilidad de uso en el manejo básico de XML::Simple se extiende a los documentos XML con varios niveles. Considera el archivo XML en el Listado A. Si lo lees con XMLin(), recibirás una estructura como la que se muestra en el Listado B.

XML::Simple representa los elementos repetidos como elementos en un array anónimo. Por lo tanto, los diversos elementos <employee> del archivo XML se han convertido en un array Perl, cado uno de cuyos elementos representa a un empleado. Para acceder al valor "John Doe", simplemente necesitas utilizar la sintaxis $data->{employee}->[0]->{name}.

También puedes hacer esto automáticamente en un script Perl desreferenciando $data->{employees} y luego iterando sobre el array utilizando un bucle foreach(). Un ejemplo de esto es el código en el Listado C. Y aquí está la salida:

John Doe
Edad / Sexo: 43 / M
Departamento: Operaciones

Jane Doe
Edad / Sexo: 31 / F
Departamento: Cuentas

Be Goode
Edad / Sexo: 32 / M
Departamento: Recursos Humanos

Cómo utilizar Jakarta Commons HTTP Client para acceder a páginas web en Java

Manejo de atributos

XML::Simple maneja los atributos de la misma forma que maneja los elementos, colocándolos en un hash. Considera el archivo XML en el Listado D. Si lo analizas con XML::Simple, la salida se verá como en el Listado E. Observa que se coloca el contenido de cada elemento dentro de una clave especial llamada "content", que puedes acceder utilizando la notación estándar discutida anteriormente.

Controlando el comportamiento del analizador

Dos opciones interesantes que puedes usar para controlar el comportamiento de XML::Simple son ForceArray y KeyAttr, que se pasan típicamente al constructor del objeto. La opción ForceArray es un indicador booleano que le indica a XML::Simple que convierta los elementos XML en arrays indexados regulares en lugar de hashes. El fragmento de código en el Listado F ilustra esto. Y aquí está la salida:

$VAR1 = {
'department' => [
'Operations'
],
'name' => [
'John Doe'
],
'sex' => [
'M'
],
'age' => [
'43'
]
};

Esta opción es útil si deseas crear una representación consistente de tu árbol de documentos XML en Perl. Simplemente forzas todos los elementos y atributos a tener una forma de array y utilizas las funciones de array de Perl para procesarlos.

Otra opción importante es KeyAttr, que se puede utilizar para indicarle a XML::Simple que utilice un elemento particular como una "clave" única al construir el hash que representa un documento XML. Cuando se especifica una clave, el valor del elemento correspondiente (en lugar de su nombre) se utiliza como una clave dentro de la referencia de hash, y sirve como un índice para acceder rápidamente a los datos relacionados.

La mejor manera de entender esto es con un ejemplo. Considera el archivo XML en el Listado G. Si lo analizas con XML::Simple, normalmente obtendrás una estructura Perl como la del Listado H. Sin embargo, si le dices a XML::Simple que el campo SKU es un índice único para cada elemento, pasándole la opción KeyAttr en el constructor, de esta manera:

Cómo utilizar jdb para depurar programas Java sin un IDE

$xml = new XML::Simple (KeyAttr=>'sku');

la estructura Perl cambiará para utilizar el valor de ese elemento como clave, tal como se muestra en el Listado I. Esto te permite acceder directamente a un elemento utilizando su SKU, por ejemplo, $data->{item}->{A74}->{desc}.

Convirtiendo estructuras Perl en XML

Por último, también puedes convertir un objeto Perl en un documento XML con el método XMLout() de XML::Simple. Aquí tienes un ejemplo:

#!/usr/bin/perl

# utilizar el módulo

use XML::Simple;

Cómo utilizar JEP: un analizador de expresiones matemáticas en Java

use Data::Dumper;

# crear el array

@arr = [
{'country'=>'england', 'capital'=>'london'},
{'country'=>'norway', 'capital'=>'oslo'},
{'country'=>'india', 'capital'=>'new delhi'} ];

# crear el objeto

$xml = new XML::Simple (NoAttr=>1, RootName=>'data');

# convertir la referencia de array Perl en un documento XML

Cómo reducir las dependencias entre aplicaciones con Java Message Service (JMS)

$data = $xml->XMLout(\@arr);

# acceder a los datos XML

print Dumper($data);

Y aquí está la salida:

<data>
<anon>
<anon>
<country>england</country>
<capital>london</capital>
</anon>
<anon>
<country>norway</country>
<capital>oslo</capital>
</anon>
<anon>
<country>india</country>
<capital>new delhi</capital>
</anon>
</anon>
</data>

No hace falta decir que este mismo documento XML puede ser leído nuevamente por XML::Simple para recrear la estructura Perl original.

Y esto es todo para este artículo. Espero que ahora tengas una mejor comprensión de cómo XML::Simple vive hasta su nombre y lo uses la próxima vez que tengas que analizar un archivo XML en Perl.

En Newsmatic nos especializamos en tecnología de vanguardia, contamos con los artículos mas novedosos sobre Desarrollo, allí encontraras muchos artículos similares a Cómo parsear datos XML de manera sencilla con Perl , tenemos lo ultimo en tecnología 2023.

Artículos Relacionados

Subir

Utilizamos cookies para mejorar su experiencia de navegación, mostrarle anuncios o contenidos personalizados y analizar nuestro tráfico. Al hacer clic en “Aceptar todo” usted da su consentimiento a nuestro uso de las cookies.