White Paper: Cómo leer información de un XML y almacenarla en BBDD

En el mundo de Internet nos podemos encontrar una amplia gama de opciones a la hora de pasar información de una web a otra. Uno de los sistemas más utilizados son los archivos XML, formados por etiquetas que almacenan una serie de datos. Este tipo de archivo suele ser muy utilizado para alimentar una base de datos con información proveniente de algún proveedor, por ejemplo, la programación de los diferentes canales de televisión o la predicción del tiempo. Descargar White Paper: ‘Cómo leer información de un XML y almacenarla en BBDD’  

Para trabajar con esos datos es muy importante saber recorrer esos archivos para sacar toda la información que se almacena en su interior. Lo más habitual es que esa información sea almacenada en una base de datos de nuestra página web para trabajar de forma más cómoda.

 

Debido a la importancia que tienen estos archivos, hoy en nuestro White Paper explicaremos el proceso para parsear un archivo XML y guardar sus datos en una base de datos, que daremos de alta de ejemplo.

 

XML que utilizaremos

Lo primero de todo, para explicar este proceso, es hacernos con un archivo XML que nos sirva de ejemplo. Nosotros utilizaremos uno sencillo con varios campos y que mostrará información sobre libros. En concreto, el archivo mostrará información sobre el título, el autor, el ISBN y la sinopsis. De esta forma, el archivo XML con el que trabajaremos será el siguiente:

<?xml version="1.0" encoding="UTF-8"?>
 <libros> 
     <libro>
         <titulo>La alianza del Grial </titulo>
         <autor>Niall Wilson, David</autor>
         <sinopsis>Obsesionado con la obtención del Santo Grial para el clan Lasombra, el vampiro Montrovant se embarca en una búsqueda que le llevara a la creación de los Caballeros Templarios, a la guarida de un gran mal egipcio y a los desiertos de Tierra Santa.</sinopsis> 
         <isbn>978-84-8421-070-2 </isbn> 
     </libro> 
     <libro>
         <titulo>La alquimia de la transformación</titulo>
         <autor>Lozowick, Lee</autor>
         <sinopsis>Esta obra es un tesoro poco común: un mapa y una guía vivos y actuales del camino espiritual comentados por alguien que lo conoce personalmente. Con un lenguaje directo, sencillo, ameno y lleno de humor,</sinopsis> 
         <isbn>978-84-88242-37-2  </isbn> 
     </libro> 
     <libro>
         <titulo>Los asesinos del grial</titulo>
         <autor>Clynes, Michael </autor>
         <sinopsis>Tras los episodios relatados en Los crímenes de la rosa blanca y El cáliz envenenado, Roger Shallot cuenta en esta nueva entrega de sus memorias el caso de Stafford, duque de Buckinham, quien, en su búsqueda del Santo Grial y Excalibur, tuvo la osadía de enfrentarse a los templarios.</sinopsis> 
         <isbn>978-84-487-2157-2 </isbn> 
     </libro> 
 </libros>

 

 

Tras el archivo XML, el siguiente paso será crear nuestra base de datos. El script que se encargará de hacer esto será el siguiente.

CREATETABLE `libros` (
    `id` INT(11)NOTNULL AUTO_INCREMENT ,
    `titulo` VARCHAR(100)NOTNULL,
    `autor` VARCHAR(100)NOTNULL,
    `sinopsis` VARCHAR(400)NOTNULL,
    `isbn` VARCHAR(20)NOTNULL,
PRIMARYKEY(`id`)
)

 

Como se puede ver, se trata de una tabla sencilla donde hemos declarado todos los campos que contiene el archivo XML que os hemos mostrados anteriormente, además de un campo “id” que será utilizado como índice y cuyo valor irá aumentando de forma automática con cada nuevo registro insertado en base de datos.

 

 

Recorrer XML e insertar datos en Base de Datos

Creada la base de datos, será el momento de ver el código que se encargará de recorrer el archivo XML e ir insertando los registros en la tabla libros. Para ello, lo primero de todo será establecer la conexión con la base de datos. Esto lo hacemos mediante la siguiente instrucción.

$conn = mysqli_connect("localhost", "root", "idue93duue", "parsexml");

 

A la función “mysqli_connect” le pasamos cuatro parámetros:

  • Host: Dirección del servidor de la base de datos. En nuestro caso “localhost”.
  • Usuario: Es el nombre del usuario que tiene acceso a la base de datos. En nuestro ejemplo “root”.
  • Contraseña: La clave que utiliza el usuario para conectarse a la base de datos. En nuestro caso “idue93duue”.
  • Base de datos: El último de los parámetros hace referencia a la base de datos a la que nos queremos conectar. En nuestro caso “parsexml”.

 

Para saber si se han insertado registros en la base de datos, utilizaremos una variable de nombre “$filasAfectada” que se incrementará en una unidad con cada inserción. Al principio del todo la inicializaremos a 0.

 

Realizada la conexión, ahora deberemos cargar el archivo XML en una variable que nos permita ir recorriéndola de forma sencilla. Esto lo conseguimos gracias a la función “simplexml_load_file()”. A la que le pasamos la ruta hacia la localización del archivo XML que queremos parsear.

$xml = simplexml_load_file("libros.xml") or die("Error: No se puede cargar el fichero xml");

Lo que devuelve la función anterior lo guardamos en la variable “$xml”, que será un objeto que tendrá todos los datos del archivo. En caso de que no se pueda leer el contenido, se mostrará un error por pantalla.

 

A la hora de recorrer los datos, tendremos que hacer uso de la función “children()” del objeto XML que se ha creado con la función “simplexml_load_file()”. Esta función la utilizaremos dentro de un bucle “foreach”. Con cada una de las llamadas, recuperaremos un hijo, que en nuestro archivo XML equivaldría a la siguiente estructura.

<libro>
     <titulo>La alquimia de la transformación</titulo>
     <autor>Lozowick, Lee</autor>
     <sinopsis>Esta obra es un tesoro poco común: un mapa y una guía vivos y actuales del camino espiritual comentados por alguien que lo conoce personalmente. Con un lenguaje directo, sencillo, ameno y lleno de humor,</sinopsis> 
     <isbn>978-84-88242-37-2</isbn> 
</libro> 

 

También, en cada llamada, lo que haremos será guardar esos hijos en un objeto al que llamaremos “$fila” y sobre el que tendremos que actuar para recuperar la información que guardaremos en la tabla.

foreach ($xml->children() as $fila) {
    ……..
}

 

Dentro del anterior bucle, lo primero que haremos será guardar en variables cada uno de los datos que forman parte de cada libro.

$titulo = $fila->titulo;
$autor = $fila->autor;
$sinopsis = $fila->sinopsis;
$isbn = $fila->isbn;

 

Una vez que tenemos los datos, es el momento de crear la instrucción SQL que se encargará de realizar la inserción en nuestra base de datos.

$sql = "INSERT INTO libros(titulo,autor,sinopsis,isbn) VALUES ('" . $titulo . "','" . $autor . "','" . $sinopsis . "','" . $isbn . "')";

 

Ejecutaremos esta instrucción SQL mediante la función “mysqli_query” de PHP, a la que le pasamos como parámetros la conexión creada al principio y la sentencia SQL a ejecutar.

$result = mysqli_query($conn, $sql);

 

Por último, comprobamos si la inserción del registro se ha realizado correctamente. De ser así, aumentaremos en una unidad la variable “$filasAfectadas”. Si no se ha podido insertar, mostraremos un error por pantalla.

if (! empty($result)) {
   $filasAfectada ++;
} else {
   $error_message = mysqli_error($conn) . "n";
}

 

A continuación os dejamos el código completo del script.

<?php
$conn = mysqli_connect("localhost", "root", "idue93duue", "parsexml");

$filasAfectada = 0;

$xml = simplexml_load_file("libros.xml") or die("Error: No se puede cargar el fichero xml");

foreach ($xml->children() as $fila) {
    
    $titulo = $fila->titulo;
    $autor = $fila->autor;
    $sinopsis = $fila->sinopsis;
    $isbn = $fila->isbn;
    
    $sql = "INSERT INTO libros(titulo,autor,sinopsis,isbn) VALUES ('" . $titulo . "','" . $autor . "','" . $sinopsis . "','" . $isbn . "')";
    
    $result = mysqli_query($conn, $sql);
    
    if (! empty($result)) {
        $filasAfectada ++;
    } else {
        $error_message = mysqli_error($conn) . "n";
    }
}

 

Este código puede servir como base para poder recorrer todo tipo de XML. Lo único que deberemos hacer será adaptarlo a las características de la estructura del archivo que queramos parsear.

 

 

Si quieres estar a la última en tecnología y conocer todo lo que se mueve en el sector, ¡suscríbete a nuestro boletín!

Logotipo de acenews

Déjanos un comentario o cuéntanos algo.

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.