> Manuales > Taller de 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.

Sara Alvarez

Equipo DesarrolloWeb.com

Manual