AOWS

Just another adrian’s weblog

De XML a MySQL con Perl y el módulo XML::Parser

leave a comment »

Estos días estoy dando mis primeros pasitos en Perl, trabajando en un script que importe datos de un XML a MySQL. Para ello utilizo el módulo XML::Parser. El código más o menos sería como sigue.

[perl]
#!/usr/bin/perl -w

use strict;
use DBI;
use XML::Parser;
use XML::Diff;
use Encode;

my $bd_nombre = ”;
my $bd_host = ”;
my $bd_usuario = ”;
my $bd_clave = ”;

# conectamos con la base de datos
my $dbh = DBI->connect(‘DBI:mysql:’ . $bd_nombre . ‘:’ . $bd_host, $bd_usuario, $bd_clave);

# archivo xml
my $archivo_xml= get(‘http://prueba.com/archivo.xml’);

# le quitamos los espacios iniciales a cada línea
$archivo_xml =~ s/^\s*//;

# etiqueta para cada elemento xml
my $etiqueta = ‘producto’;

# hash con los datos
my %row = (
“id” => undef,
“nombre” => undef,
“precio” => undef
);

# hash con las correspondencias
my %mapeo = (
“id” => “id”,
“nombre” => “name”,
“precio” => “price”
);

# creamos el parseador xml
my $parser = new XML::Parser (
Handlers => {
Start => \&handle_start,
End => \&handle_end,
Char => \&handle_text
}
);

# parseamos el archivo
$parser_new->parsefile ($archivo_xml);

# desconexión base de datos
$dbh->disconnect ();

# subrutinas
# ———–

# inicializa el hash row
sub handle_start {

my ($p, $tag) = @_;

if ($tag eq $etiqueta)
{
foreach my $key (keys (%row))
{
$row{$key} = undef;
}
}

}

# rellena el hash row
sub handle_text {

my ($p, $data) = @_;

my $tag = $p->current_element ();
$row{$tag} .= encode(“latin1”, $data) if exists ($row{$tag});

}

# crea la consulta sql y la ejecuta
sub handle_end {

my ($p, $tag) = @_;

if ($tag eq $etiqueta)
{
my $str;

foreach my $key (keys (%row))
{
$str .= “,” if $str;
$str .= “$mapeo{$key}=” . $dbh->quote($row{$key});
}
$str = encode(“iso-8859-1”, $str);
$dbh->do (“INSERT INTO tabla SET $str”);
}

}

[/perl]

Written by adrian

10 agosto, 2007 a 20:43

Publicado en Posts

Tagged with , ,

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: