SimpleXML … la verdad es que sí

Tags: , , ,

Ú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:

<libros>
<libro id="1">
<titulo>El señor de los anillos</titulo>
<autor>Tolkien</autor>
</libro>
<libro id="2">
<titulo>El fin de la infancia</titulo>
<autor>Clark</autor>
</libro>
</libros>

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
Comentarios