Banner

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.