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"]
[/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á

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!
Gracias! Un placer verte por aquí también
Claro, la duda ofende
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!!
ara cada nivel tengo un id el cual me sirve
cheap escorts
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