• Publicidad

Importar datos de XML a una base de datos MySQL

Todo acerca de las bases de datos que existen: SQL, MySQL, Oracle, Postgres, CSV, etc.

Importar datos de XML a una base de datos MySQL

Notapor jcarranza » 2010-04-20 05:06 @254

Dado el siguiente XML, quiero insertar los datos en la tabla 'usuarios' de mi base de datos en MySQL. ¿Cómo se hace?

Sintáxis: [ Descargar ] [ Ocultar ]
Using xml Syntax Highlighting
  1. <?xml version="1.0" encoding="ISO-8859-1" ?>
  2. <!DOCTYPE datos_usuarios SYSTEM "datos_validos.dtd">
  3.  
  4. <datos_usuarios>
  5.  
  6. <usuario>
  7. <id>1</id>
  8. <nombre>ernerto</nombre>
  9. <apellidos>guzman</apellidos>
  10. <direccion>canarias</direccion>
  11. <telefono>655666777</telefono>
  12. <email>[email protected]</email>
  13. <login>ernedto2</login>
  14. <clave>ller43</clave>
  15. </usuario>
  16.  
  17. </datos_usuarios>
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


La tabla en MySQL tiene los campos: id,nombre,apellidos,direccion,telefono,email,login,clave

¡¡¡Saludos!!!
jcarranza
Perlero nuevo
Perlero nuevo
 
Mensajes: 44
Registrado: 2010-04-20 05:00 @250

Publicidad

Re: Importar datos de XML a una base de datos MySQL

Notapor explorer » 2010-04-20 05:38 @276

Bienvenido a los foros de Perl en Español, jcarranza.

Esta es una forma sencilla de hacerlo (no probado):
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use diagnostics;
  5.  
  6. use DBI;
  7. use XML::Simple;
  8.  
  9. my $xml_inline = q(
  10.     <datos_usuarios>
  11.         <usuario>
  12.         <id>1</id>
  13.         <nombre>ernerto</nombre>
  14.         <apellidos>guzman</apellidos>
  15.         <direccion>canarias</direccion>
  16.         <telefono>655666777</telefono>
  17.         <email>loe@ole.es</email>
  18.         <login>ernedto2</login>
  19.         <clave>ller43</clave>
  20.         </usuario>
  21.     </datos_usuarios>
  22. );
  23.  
  24. my $xmls = XML::Simple->new;
  25. my $xml;
  26.  
  27. eval {
  28.     $xml = $xmls->XMLin( $xml_inline, KeyAttr => 1 );
  29. };
  30.  
  31. die "ERROR en la validación del xml: $!\n"
  32.     if $@;
  33.  
  34. #use Data::Dumper;
  35. #print Dumper $xml;
  36.  
  37. my $dbh = DBI->connect('DBI:mysql:database=labasededatos;host=localhost', 'usuario', 'contraseña', )
  38.     or die "ERROR: No pude conectarme a la base de datos: $!\n";
  39.  
  40. my $sth = $dbh->prepare("INSERT INTO tabla(id, nombre, apellidos, direccion, telefono, email, login, clave) VALUES (?,?,?,?,?,?,?,?)");
  41.  
  42. $sth->execute(
  43.     $xml->{usuario}->{id},
  44.     $xml->{usuario}->{nombre},
  45.     $xml->{usuario}->{apellidos},
  46.     $xml->{usuario}->{direccion},
  47.     $xml->{usuario}->{telefono},
  48.     $xml->{usuario}->{email},
  49.     $xml->{usuario}->{login},
  50.     $xml->{usuario}->{clave},
  51. );
  52.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

Si el xml lo tienes en un fichero aparte, solo tienes que pasárselo a XMLin() para que lo lea.

También tienes el módulo XML::EasySQL que puede realizar la misma tarea, con menos líneas.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Bases de datos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado