Parsear y extraer la información de un XML en PHP con DOMDocument

  • Por
  • PHP
Explicamos la clase DOMDocument de PHP que sirve para interpretar y parsear archivos XML para extraer cualquier información de sus nodos.
En este artículo vamos a ver como mediante la función file_get_contents() recogemos el contenido de un archivo .xml del que queremos extraer información. Luego, para interpretar el XML utilizamos la clase DOMDocument, de programación orientada a objetos en PHP, que nos permite acceder a los nodos del código XML por medio de una estructura de datos basada en objetos. Con todo, podremos finalmente mostrar en nuestra página PHP cualquier contenido extraído del archivo XML.

Lo primero que tenemos que dejar claro es que para poder realizar este ejemplo tenéis que tener como mínimo, la primera versión de PHP5, ya que en PHP4 la clase DOMDocument no funciona.

Una vez que tenemos esto claro el ejemplo es bastante sencillo de realizar. Partimos de un archivo .xml en el que tenemos un listado de usuarios con su nombre y la URL de su página web y lo primero que vamos a hacer es recoger el contenido del archivo .xml en una variable mediante la función file_get_contents().

$xml = file_get_contents("listado.xml");

Una vez que tenemos el contenido en nuestra variable vamos a instanciar la clase DOMDocument con la siguiente linea:

$DOM = new DOMDocument('1.0', 'utf-8');

Si os fijáis vemos que he pasado como parámetro el formato y la codificación del XML que hemos recogido en la variable $xml.

Lo siguiente que tenemos que hacer es leer el contenido de la variable, pero sabiendo que es un contenido XML, para ello utilizamos el procedimiento loadXML que esta dentro de DOMDocument

$DOM->loadXML($xml);

A continuación lo que debemos hacer es separar cada registro de nuestro XML, para ello realizamos la siguiente acción:

$usuarios = $DOM->getElementsByTagName('usuario');

Esta linea lo que hace es crear un array con todos los registros que tengamos con la etiqueta usuarios en nuestro XML.

Una vez que tenemos esto, lo que nos falta es mostrarlo en nuestra página web PHP. Para ello tan sólo tenemos que recorrer el array e ir creando nuestro listado.

<?php
foreach($usuarios as $usuario) {
echo '<li><a href="'.$usuario->getElementsByTagName("url")->item(0)->nodeValue.'" target="_blank">'.utf8_decode($usuario->getElementsByTagName("nombre")->item(0)->nodeValue).'</a></li>';
}
?>

Bueno estas lineas lo que hacen es crear un listado con el nombre del usuario y un enlace a su web. Para ello utiliza la función getElementsByTagName() que te coge el valor de la etiqueta que le pases como parámetro.

Para que os quede más claro os dejo todo el código completo de nuestro archivo .php

<html>
<head>

</head>
<body>
Listado de alumnos:
<?php
$xml = file_get_contents("listado.xml");
$DOM = new DOMDocument('1.0', 'utf-8');
$DOM->loadXML($xml);
$cursos = $DOM->getElementsByTagName('usuario');
?>
<ul>
<?php
foreach($usuarios as $usuario) {
echo '<li><a href="'.$usuario->getElementsByTagName("url")->item(0)->nodeValue.'" target="_blank">'.utf8_decode($usuario->getElementsByTagName("nombre")->item(0)->nodeValue).'</a></li>';
}
?>
</ul>

</body>
</html>

Cabe destacar que la función file_get_contens() puede también recoger el contenido de un archivo remoto, tan sólo tenemos que pasarla la URL de la siguiente forma:

$xml=file_get_contents("http://www.dominio.com/archivo.xml");

Nota: Queremos advertir de un posible problema que podemos encontrarnos con este script y es que no todos los servicios de hosting permiten la lectura de archivos remotos, es decir, no permiten leer archivos que no están en su propio servidor. Por lo que antes de intentar hacerlo tenéis que consultar con vuestro proveedor de hosting si lo permiten o no. Esto sería útil si necesitaremos leer el contenido de un archivo .xml de otra web para poner parte de ese contenido en la nuestra.

Autor

Sara Alvarez

Equipo DesarrolloWeb.com

Compartir

Comentarios

Rafael

12/4/2011
Error de tipeo
Hola. En el último párrfo se te fue "file_get_contens()" en lugar de "file_get_contents()". Por lo demás, excelente artículo. Lo necesitaba. Gracias.

Gonzalo

13/5/2011
$cursos???
También en vez de $cursos es $usuarios, excelente aporte gracias

andres felipe

08/6/2011
pregunta
excelente articulo me parece muy interezante esta pagina para aprender , pero quiciera saber como profundizar en php y xml pues la verdad no entiendo casi y busco informacion , tutoriales , videos y sigo sin entender , cosa que no me pasa con otros lenguajes como .net o javascript .... me gustaria mucho aprender sobre php y xml ...ayudenme...gracias

Paola

23/7/2011
Buen articulo
Buen articulo justo y preciso... lo que buscaba... gracias :) esperare a ver si me funciona

Jorge Mario Romero Arroyo

02/8/2011
Agradecimientos
Muy buen aporte, muy detallado, gracias me fué de mucha utilidad.

AHAA

21/5/2012
Solicitud Archivo Ejemplo XML
Seria posible contar con un ejemplo del archivo "listar.xml", esto facilitaria el entendimiento, del articulo

Colostethus

24/5/2012
Agradecimiento
Excelente el aporte. Tan sencillo que en 5 minutos logré lo que no pude en toda la mañana. Gracias mil.

ismael

24/10/2015
Hacerlo automático cada cierto tiempo
Hola me gustaría automatizarlo, y que refrescara la información cada 12 horas o un tiempo determinado, me podrías decir como hacerlo? estoy volviéndome loco jeje