La importación mediante programación de datos XML en una base de datos MySQL es la mar de útil en muchÃsimas situaciones. En este tutorial, vamos a aprender cómo insertar los datos de un archivo XML en una base de datos utilizando PHP. Consideraremos los nodos XML como las columnas de la tabla de nuestra base de datos y, por lo tanto, los datos de cada nodo serán los valores que se insertarán en dicha tabla.
En este ejemplo, contaremos con un archivo input.xml que contendrá nodos secundarios nombrados como tÃtle, description, links y keywords. Cargaremos este archivo para obtener el objeto con el cual parsearemos los datos XML. Después, en el código PHP, recorreremos cada elemento parseado para obtener su nodo hijo y sus datos. Con esta información, crearemos nuestro INSERT y lo ejecutaremos en nuestra tabla MySQL para copiar los datos del XML a la base de datos.
Insertar los datos XML
Cogeremos este XML nuestra aplicación de ejemplo cuya información insertaremos en nuestra BD. Este archivo contiene 3 elementos XML cuyos nodos son title, el enlace, la descripción y las etiquetas de palabras clave de los nodos secundarios. Como trataremos los nodos secundarios como columnas de nuestra tabla, tendremos que crear las columnas de nuestra tabla en concordancia con el nombre de estos nodos secundarios. Al parsear este XML, los datos dentro de estos nodos secundarios se insertarán en la base de datos en su correspondiente columna.
<?xml version="1.0" encoding="UTF-8"?> <items> <item> <title>Configurar el modo mantenimiento en CodeIgniter</title> <link>http://programacion.net/articulo/configurar_el_modo_mantenimiento_en_codeigniter_1965</link> <description>El modo mantenimiento mejora la experiencia del usuario mostrando una notificación cuando el sitio web está en mantenimiento. Cuando la web necesita una actualización, siempre es buena idea mostrar una página de mantenimiento bien diseñada en lugar de mostrar un error en la web.</description> <keywords>CodeIgniter, mantenimiento</keywords> </item> <item> <title>Carrusel del imágenes con jQuery, PHP y MySQL</title> <link>http://programacion.net/articulo/carrusel_del_imagenes_con_jquery-_php_y_mysql_1966</link> <description>Los sliders o los carruseles son una caracterÃstica muy importante para rotar elementos en el diseño web. Muchos de vosotros nos habéis solicitado un tutorial sobre cómo crear un carrusel de múltiples imágenes con Bootstrap. Por lo tanto, en este tutorial veremos cómo hacer esto, además con MySQL...</description> <keywords>Carrusel, jQuery, PHP, MySQL</keywords> </item> <item> <title>5 nuevas caracterÃsticas de HTML y CSS muy a tener en cuenta en este 2018</title> <link>http://programacion.net/articulo/5_nuevas_caracteristicas_de_html_y_css_muy_a_tener_en_cuenta_en_este_2018_1967</link> <description>El lenguaje HTML y CSS está en constante evolución, ofreciendo a los desarrolladores frontend y diseñadores web nuevas posibilidades. En este artÃculo veremos 5 nuevas caracterÃsticas de HTML y CSS realmente emocionantes para crear sitios webs profesionales en este 2018.</description> <keywords>HTML, CSS, caracteristicas</keywords> </item> </items>
Y aquà el script SQL para crear nuestra tabla.
CREATE TABLE IF NOT EXISTS `tbl_tutorials` ( `item_id` int(11) NOT NULL, `title` varchar(100) NOT NULL, `link` varchar(100) NOT NULL, `description` varchar(400) NOT NULL, `keywords` varchar(50) NOT NULL );
Parsear el XML e insertar los datos a nuestra tabla MySQL mediante PHP
En este PHP, parsearemos de manera sencilla el XML para crea el gestor del archivo. Con este gestor, recorreremos los elementos XML para leer los nodos secundarios. Luego crearemos la consulta de inserción de MySQL utilizando los datos leÃdos del XML.
Después de insertar los datos, se le mostrará al usuario cuántas filas se han agregado a la base de datos. En caso de que ocurra algún error, se mostrará al usuario el mensaje de error sobre la causa del error.
<?php $conn = mysqli_connect("localhost", "root", "test", "phpsamples"); $affectedRow = 0; $xml = simplexml_load_file("input.xml") or die("Error: Cannot create object"); foreach ($xml->children() as $row) { $title = $row->title; $link = $row->link; $description = $row->description; $keywords = $row->keywords; $sql = "INSERT INTO tbl_tutorials(title,link,description,keywords) VALUES ('" . $title . "','" . $link . "','" . $description . "','" . $keywords . "')"; $result = mysqli_query($conn, $sql); if (! empty($result)) { $affectedRow ++; } else { $error_message = mysqli_error($conn) . "n"; } } ?> <h2>Insert XML Data to MySql Table Output</h2> <?php if ($affectedRow > 0) { $message = $affectedRow . " records inserted"; } else { $message = "No records inserted"; } ?>
Este código verifica la condición del texto de respuesta creado durante el proceso de inserción de datos XML en nuestra tabla de la base de datos. Este texto de respuesta es para informar al usuario sobre el resultado de la inserción de MySQL.
<style> body { max-width: 550px; font-family: Arial; } .affected-row { background: #cae4ca; padding: 10px; margin-bottom: 20px; border: #bdd6bd 1px solid; border-radius: 2px; color: #6e716e; } .error-message { background: #eac0c0; padding: 10px; margin-bottom: 20px; border: #dab2b2 1px solid; border-radius: 2px; color: #5d5b5b; } </style> <div class="affected-row"> <?php echo $message; ?> </div> <?php if (! empty($error_message)) { ?> <div class="error-message"> <?php echo nl2br($error_message); ?> </div> <?php } ?>
Â