jueves, 15 de mayo de 2008

SimpleXML … la verdad es que sí

Últimamente trabajo mucho con PHP y de vez en cuando toca lidiar con información de terceros en XML o HTML. Con las funciones (o métodos) de SimpleXML el trabajo es sencillísimo.

SimpleXML carga un archivo XML en memoria como una estructura similar a un array. A los atributos de una etiqueta se accede con la notación de array asociativo y al contenido de un nodo con la notación ->

Ejemplo:


El señor de los anillos
Tolkien


El fin de la infancia
Clark


Parsear este XML es trivial:
<?php
$libros = simplexml_load_file('libros.xml');
foreach ($libros->libro as $libro) {
    echo sprintf("Libro nº %s: Título: %s Autor: %s",
            (string)$libro['id'],
            (string)$libro->titulo,
            (string)$libro->autor);
}
?>

El forzar la conversión de cada valor a string no es superfluo: si no se hace esto lo que obtenemos es otro objeto SimpleXML anidado al "padre" en vez del contenido del atributo o del nodo.

Otro uso posible es el parseo de HTML. Para garantizarnos que el HTML de origen está bien formado, conviene pasarle antes un tidy:
tidy -asxhtml -clean -numeric fichero.html

No hay comentarios:

Publicar un comentario