Leer archivos XML con PHP y SimpleXML

Debido al trabajo y a la curiosidad claro está, hoy toca hablar de cómo leer los datos XML recibidos con la extensión SimpleXML, disponible en PHP5.

Con SimpleXML es muy fácil convertir un archivo XML en un objeto, y claro está se puede trabajar con estos objetos como con cualquier otro en PHP.

Veamos un ejemplo, con el siguiente archivo XML:

[code="php"]



Trabajo
Busco trabajo


Re: Trabajo
Yo también.


[/code]

Asumimos que en $data tenemos el XML a leer, con el siguiente código php:

[code="php"]
$xml = simplexml_load_string($data);
foreach ($xml->message as $message)
echo $message->text.' ';
[/code]

Con lo que obtenemos:

[code]Busco trabajo Yo también[/code]

SimpleXML devuelve errores de todo tipo ya sean documentos malformados o problemas de otro tipo (encoding). En mi caso solo me interesaban los documentos válidos, con lo que los demás podía descartarlos. Podemos hacerlo así:

[code="php"]
function loadXML($data) {
$xml = @simplexml_load_string($data);
if (!is_object($xml))
throw new Exception('Error de lectura XML',1001);
return $xml;
}
[/code]

Si tenemos un XML con muchos niveles, usar “foreach” resulta un poco engorroso. Podemos utilizar el soporte XPath que ofrece SimpleXML. Por ejemplo para acceder a todos los elementos “topic” del ejemplo anterior, pondríamos:

[code="php"]
foreach ($xml->xpath('//topic') as $topic)
echo $topic."\n";
[/code]

Hay muchos temas de los que hablar sobre este tema como las funciones simplexml_import_dom() y dom_import_simplexml() que nos permiten convertir un objeto SimpleXML en un objeto DOM, pero bueno…otro día será :P

6 Respuestas a “Leer archivos XML con PHP y SimpleXML”

  1. Sergio (Soyunrandom) dice:

    Hola! ya probé el simplexml en una páginita que hice y está bastante bien, sobre todo a la hora de gestionar álbunes de fotos. No sabía nada del soporte xPath, lo que aún da mas versatilidad a la hora de usar xml en nuestros proyectos.

    Gran artículo!

  2. Bartman dice:

    Gracias! Un placer verte por aquí también :)

  3. Sergio (Soyunrandom) dice:

    Claro, la duda ofende :P

  4. Serenity dice:

    Hola!!, gracias por tu gran aporte, muy bien explicado. Solo que yo tengo un problema, tengo un XML con muchos niveles y estoy usando foreach, pero no quiero que se impriman todos los niveles porque algunos se repiten, para cada nivel tengo un id el cual me sirve para hacer una comparación y si se repite con el anterior no lo quiero imprimir, pero no me funciona, sabes si usando la función simpleXML permite imprimir no todos los niveles del XML??

    Gracias!!

  5. ara cada nivel tengo un id el cual me sirve
    cheap escorts

  6. Jonathan dice:

    Hola, buen articulo me sirvio bastante, solo una pregunta si me pueden ayudar, yo tengo una lista muy grande de elementos en un xml y si yo le pongo foreach me jala todo, como puedo hacer para paginar eso o yo jalar solo los que quiera.. espero me entiendan. Gracias

Deja un comentario