dominios y alojamiento web en hostalia

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

16 de February de 2011
Valoración del artículo:
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.

Compartir en redes sociales

Comentarios
Fueron enviados 7 comentarios al artículo
2 comentarios no revisados
5 comentarios revisados:
Error de tipeo
Por: Rafael
12/4/2011
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.
$cursos???
Por: Gonzalo
13/5/2011
También en vez de $cursos es $usuarios, excelente aporte gracias
pregunta
Por: andres felipe
08/6/2011
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
Agradecimientos
Por: Jorge Mario Romero Arroyo
02/8/2011
Muy buen aporte, muy detallado, gracias me fué de mucha utilidad.
Solicitud Archivo Ejemplo XML
Por: AHAA
21/5/2012
Seria posible contar con un ejemplo del archivo "listar.xml", esto facilitaria el entendimiento, del articulo

Manuales relacionados
Categorias relacionadas
El autor
Lectura recomendada
Compra este libro en Agapea, la librería urgente a domicilio.
Últimas noticias
Donaciones
Si piensas que te hemos ayudado y merecemos tu apoyo económico...