Tratamiento de archivos XML con PHP

En algunas ocasiones es necesario o práctico tratar o guardar información en archivos para recuperarlos en otro momento.

Para conseguir esto se suele guardar esta información en una base de datos pero en ocasiones no disponemos de este servicio o nos vemos en la necesidad de guardar esta información en un archivo.

En este artículo vamos a ver un ejemplo de como guardar y recuperar información en un archivo XML.

Vamos a guardar y recuperar 3 datos; un titular, un imagen y una descripción de un artículo.

En nuestro <body> necesitaremos tener un formulario para permitir la acción de rellenar y guardar la información que queremos almacenar en el archivo XML.

<form action="index.php" method="post" enctype="multipart/form-data">
   <p>Titulo<br/>
   <input type="text" name="title" value="<?=$xml->title?>" /></p>
   <p>Descripción<br/>
   <textarea name="description" rows="3" cols="70"><?=$xml->description?></textarea></p>
   <p>Imagen<br/>
   <input type="file" name="image" /><?=$xml->img?></p>
   <input type="submit" name="save" value="Guardar"/>
</form>

Se trata de un formulario sencillo. Las particularidades que pueda tener son que permite la subida de un archivo y en los values de los inputs vemos que tenemos puesto un valor que representa lo que hay guardado en el archivo XML.

A continuación mostramos el código que recibe los datos enviados del formulario:

<?php
//Si se desea almacenar información
if (isset($_POST['save'])) {    
   //Comprobamos que el archivo a subir es una imagen tipo gif, jpg o png    
   if ((($_FILES["image"]["type"] == "image/gif") || ($_FILES["image"]["type"] == "image/jpeg") || ($_FILES["image"]["type"] == "image/png"))) {
      //Comprobamos si se ha podido subir el archivo
      if (move_uploaded_file($_FILES['image']['tmp_name'], $_FILES['image']['name'])) {
         $fp = fopen('article.xml', 'w+');
         $newXml = '<?xml version=\'1.0\' encoding=\'utf-8\' ?>'."\n";                
         $newXml .= '<article>'."\n";
         $newXml .= '<title>'.$_POST['title'].'</title>'."\n";
         $newXml .= '<description>'.$_POST['description'].'</description>'."\n";
         $newXml .= '<img>'.$_FILES['image']['name'].'</img>'."\n";
         $newXml .= '</article>'."\n";

         fwrite($fp, $newXml);
         fclose($fp);    
      }
   }
   else {
      echo '<p>La extensión del archivo no es correcta. Debe ser un archivo jpg, png o gif.</p>';
   }
}
?>

El código anterior comprueba que el archivo a subir sea una imagen tipo gif, jpg o png, hacemos la subida de la imagen y generamos el archivo XML con los datos facilitados en el formulario.

A continuación, para mostrar los datos del artículo, añadimos el siguiente código:

if (file_exists('article.xml')) {
   if ($xml = simplexml_load_file('article.xml')) {
      echo '<h2>'.$xml->title.'</h2>';
      echo '<img src="timthumb.php?src='.$xml->img.'&h100&w=350" title="'.$xml->title.'" /><br/>';
      echo '<p>'.$xml->description.'</p>';
    }
}
else {
   echo '<p>El archivo XML todavia no existe</p>';
}

Con esta porción de código lo que hacemos es comprobar si existe el archivo XML para posteriormente cargarlo o leerlo. Lo mostramos con el estilo deseado.

Ver ejemplo en funcionamiento

Autor
Escrito por Jose Aguilar - Director ejecutivo y tecnológico en JA Modules. Experto programador PrestaShop y Experto programador WordPress.
Te ha servido? Valora esta entrada!
(10 votos, promedio: 5 de 5)
Comparte en las redes sociales
¿Buscas trabajo de programador?

7 respuestas a “Tratamiento de archivos XML con PHP”

  1. Ivan uribe dice:

    Saludos,
    Gracias por compartir esta valiosa información la cual tiene mucha utilidad para quienes tenemos la necesidad de guardar información y no siempre se puede usar una base de datos.

    Por ultimo quisiera saber como guardan los archivos. Su nombre y extensión para poder practicar con ellos gracias.

  2. jhon dice:

    ahora como aria para agregar mas datos al archivo xml conservando los ya guardados

  3. Ruty dice:

    funcionó perfecto!!
    Gracias

  4. Enric dice:

    hola jose, he provado tu código y parece que funciona, pero no se donde deja el archivo article.xml no lo encuentro en mi servidor

Deja una respuesta

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.