Logo de islavisual
Logo de islavisual IslaVisual
imagen de sección

Ultima revisión 21/12/2012

Convertir de Array a XML en PHP (array2XML)

Primero, para los que no lo sepan, en el artículo de Crear un Web Service con PHP y MySQL (Introducción) podéis conocer, un poco, qué es XML.

Una vez visto esto, si queremos convertir un array a XML podemos usar la función array2xml que os permitirá convertir un array asociativo en un XML de forma muy sencilla. Sólo hay que enviarle un array bien formado y el nombre del nodo raíz (que por defecto lo llamaremos results), si se desea que sea uno concreto.

Finalmente si queremos presentarlo por pantalla, sólo habrá que enviar las cabeceras (header) correspondientes y hacer un echo.

/*  **********************************************************************************************************************
    FUNCIÓN PARA CONVERTIR UN ARRAY ASOCIATIVO EN UNA CADENA EN FORMATO XML.
    PARÁMETROS:
    -----------
    $data             --> ES EL ARRAY DE ORIGEN
    $rootNodeName    --> INDICA CÓMO SE LLAMARÁ EL NODO RAÍZ.
    $xml            --> NO CAMBIAR. INDICA EL NODO DÓNDE ESTA. SE USA PARA EL PROCESO RECURSIVO.
    **********************************************************************************************************************
/**
 * Function for convert an array associative to XML string.
 * @param string $data The source array.
 * @param string $rootNodeName Indicates how to call at root node.
 * @param string $xml Is an attributte that is necessary for operation of the method.
 * @return string Returns a XML string.
 */    
function array2XML($data, $rootNodeName = 'results', $xml=NULL){
    if ($xml == null){
        $xml = simplexml_load_string("<?xml version='1.0' encoding='utf-8'?><$rootNodeName />");
    }

    foreach($data as $key => $value){
        if (is_numeric($key)){
            $key = "nodeId_". (string) $key;
        }

        if (is_array($value)){
            $node = $xml->addChild($key);
            array2XML($value, $rootNodeName, $node);
        } else {
            $value = htmlentities($value);
            $xml->addChild($key, $value);
        }

    }

    return html_entity_decode($xml->asXML());
}

$arr = array("user" => "root", "user_id" => "1", "password" => "contraseña", "mensaje" => array("id" => "1", "descripcion" => "Descripción del texto", "prioridad" => "Alta"));
$xml = array2xml($arr);
header('Content-Type: application/xml; charset=utf-8');
echo $xml;

Espero que os sea útil alguna vez.

Sobre el autor

Pablo Enrique Fernández Casado

CEO de IslaVisual, Manager, Full Stack Analyst Developer y formador por cuenta ajena con más de 25 años de experiencia en el campo de la programación y más de 10 en el campo del diseño, UX, usabilidad web y accesibilidad web. También es escritor y compositor de música, además de presentar múltiples soft kills como la escucha activa, el trabajo en equipo, la creatividad, la resiliencia o la capacidad de aprendizaje, entre otras.

Especializado en proveer soluciones integrales de bajo coste y actividades de consultoría de Usabilidad, Accesibilidad y Experiencia de Usuario (UX), además de ofrecer asesoramiento en SEO, optimización de sistemas y páginas web, entre otras habilidades.