jueves, 27 de diciembre de 2012

Crear un XML desde un Array en PHP

Hace poco me encontré con la necesidad de generar archivos XML desde PHP. Lo interesante del tema es que el XML debe generarse en el servidor desde algunos parámetros, por eso era necesario incluir un encabezado para que el cliente lo identificara como tal.

Por lo tanto esto se compone de cuatro partes:

1) El encabezado en PHP:

<?php
header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');

header('Content-type: text/xml');
?>


2) El array puede ser en cualquier complejidad. Aqui algunos ejemplos:

<?php
$array 
= array(
    
"foo" => "bar",
    
"bar" => "foo",
);
// a partir de PHP 5.4 

$array = [
    
"foo" => "bar",
    
"bar" => "foo",
];
?>

3) La invocación se hace por una función en donde se le pasa el array, indicandole cuál es el nodo del XML en el que se va a encapsular el resto de los datos:

echo arrayToXml($array,'datos');


4) La función que hace el trabajo es la siguiente:

function arrayToXml($array,$lastkey='root')
{
    $buffer.="<".$lastkey.">";
    if (!is_array($array))
    {$buffer.=$array;}
    else
    {
        foreach($array as $key=>$value)
        {
            if (is_array($value))
            {
                if ( is_numeric(key($value)))
                {
                    foreach($value as $bkey=>$bvalue)
                    {
                        $buffer.=arrayToXml($bvalue,$key);
                    }
                }
                else
                {
                    $buffer.=arrayToXml($value,$key);
                }
            }
            else
            {
                    $buffer.=arrayToXml($value,$key);
            }
        }
    }
    $buffer.="</".$lastkey.">";
    return $buffer;
}






5) El resultado que obtenemos es un archivo en XML con la siguiente estructura:

<datos>
   <foo>bar</foo>
   <bar>foo</bar>
</datos>

No hay comentarios:

Publicar un comentario

7 razones para no usar Laravel en tu proyecto de PHP

En más de 40 años de experiencia como programador y director de proyectos de programación, he aprendido que cada requerimiento tiene mejores...