Eleazar Resendez

Just some coding blurbs

Uso de la extensión SimpleXML

1 month ago · 2 MIN READ
#Laravel 5.* 

SimpleXML in PHP Picture Flickr

De acuerdo a la documentación:

SimpleXML proporciona un conjunto de herramientas simples y fácil de usar para convertir XML a un objeto que pueda ser procesado con selectores de propiedades normales e iteradores de arrays.

Es una extensión que requiere la extensión libxml de PHP y PHP5 como mínimo.

Funciones de SimpleXML

simplexml_load_string

Esta función interpreta un string de XML correcto y lo retorna como un objeto.

@param data (un string XML correcto)
@param class_name opcional
@param options (para especificar parámetros Libxml adicionales) 

Si tenemos el siguiente string de ejemplo:

<?xml version='1.0'?> 
<document>
<title>¿Cuarenta qué?</title>
<from>Joe</from>
<to>Jane</to>
<body>
Sé que esa es la respuesta pero, ¿cuál es la pregunta?
</body>
</document>

Y hacemos $xml = simplexml_load_string($request->xml);, si el string XML es correcto podemos acceder de la siguiente forma: $xml->mensaje o en otros ejemplos, iterando el arreglo.

Leyendo sobre el tema en StackOverflow, existe otra forma de convertir un objeto SimpleXMLElement a un arreglo asociativo PHP. De esta manera, también es posible acceder a los atributos:

json_decode(json_encode($xml), true);

Guardar un XML en un archivo

Para ello se utiliza la función asXML() que formatea los datos a la versión 1.0:

$xml = simplexml_load_string($string);
$xml->asXML('test.xml');

Cargar el XML del archivo

Ahora, se hace uso de $xml = simplexml_load_file('file.xml', 'SimpleXMLElement', LIBXML_NOWARNING); y finalmente: return $xml->asXML();

Si es necesario actualizarlo, nuevamente se carga el string y se guarda con $xml->asXML('file.xml');

La clase Array2XML

Es normal que nos encontremos en la situación inversa. Tenemos un arreglo PHP que queremos convertir a XML.

Para ello existe una clase llamada Array2XML, su autor es Lalit Patel y en la siguiente liga podemos descargar la clase.

Lo interesante de esta clase es que toma en cuenta la propiedad attributes.

Ejemplo:

// Convert Array to SimpleXML
$xml = Array2XML::createXML('startTag', $xmlArray);

Y ya es todo, un arreglo XML se puede volver a convertir en un objeto XML.

Errores/Excepciones

Sugerencia: Usar libxml_use_internal_errors() para suprimir todos los errores XML y libxml_get_errors() para iterar sobre cada uno de ellos posteriormente.

Full Docs: SimpleXML

···

Eleazar Resendez

Eleazar is a very passionate Web Application Developer and Software Engineer, constantly experimenting with new technologies and striving to better as developer and the development community as a whole.
comments powered by Disqus


Proudly powered by Canvas · Sign In