Convertir un XML en un array y viceversa mediante PHP

XML es un lenguaje que codifica documentos en un formato legible por máquinas y también por humanos. Por regla general, XML se utiliza para almacenar y transportar datos.

Puedes utilizar el formato XML de muchas maneras en una aplicación web. Si te preocupa el tamaño de tu base de datos y deseas reducir el número de consultas, los archivos XML pueden ayudarte a liberar espacio. En lugar de utilizar una base de datos, puedes almacenar la información en un archivo XML y recuperar la información sin tener que conectarte a la base de datos.

En este tutorial te mostraremos cómo convertir un array disociativo o multidimensional en XML y pasarlo a un archivo.

Convertir un array multidimensional a XML

Función createXML()

Para una mejor usabilidad, agruparemos todas las conversiones (tanto de array a XML y de XML a array) en una sola función. La función createXML() convierte un array multidimensional de PHP en un archivo XML. Debes pasar el array de datos como un parámetro en la función createXML(). La función createXML() crea un documento XML utilizando la clase DOMDocument e inserta el contenido del array en dicho documento. Al final, el documento XML se guarda como un archivo XML en la ruta de archivo especificada.

function createXML($data) {
    $title = $data['title'];
    $rowCount = count($data['users']);
    
    //create the xml document
    $xmlDoc = new DOMDocument();
    
    $root = $xmlDoc->appendChild($xmlDoc->createElement("user_info"));
    $root->appendChild($xmlDoc->createElement("title",$title));
    $root->appendChild($xmlDoc->createElement("totalRows",$rowCount));
    $tabUsers = $root->appendChild($xmlDoc->createElement('rows'));
    
    foreach($data['users'] as $user){
        if(!empty($user)){
            $tabUser = $tabUsers->appendChild($xmlDoc->createElement('user'));
            foreach($user as $key=>$val){
                $tabUser->appendChild($xmlDoc->createElement($key, $val));
            }
        }
    }
    
    header("Content-Type: text/plain");
    
    //make the output pretty
    $xmlDoc->formatOutput = true;
    
    //save xml file
    $file_name = str_replace(' ', '_',$title).'_'.time().'.xml';
    $xmlDoc->save("files/" . $file_name);
    
    //return xml file name
    return $file_name;
}

Array multidimensional

El siguiente array multidimensional lo convertiremos a XML utilizando PHP.

$data = array(
    'title' => 'Users Information',
    'users' => array(
        array('name' => 'John Doe', 'email' => '[email protected]'),
        array('name' => 'Merry Moe', 'email' => '[email protected]'),
        array('name' => 'Hellary Riss', 'email' => '[email protected]')
    )
);

Convertir array a XML

Solo necesitas utilizar la función createXML() y pasarle como parámetro el array que quieres convertir a XML.

echo createXML($data);

En el código de ejemplo crearemos el siguiente XML.

<?xml version="1.0"?>
<user_info>
  <title>Users Information</title>
  <totalRows>3</totalRows>
  <rows>
    <user>
      <name>John Doe</name>
      <email>[email protected]</email>
    </user>
    <user>
      <name>Merry Moe</name>
      <email>[email protected]</email>
    </user>
    <user>
      <name>Hellary Riss</name>
      <email>[email protected]</email>
    </user>
  </rows>
</user_info>

Convertir XML en un array asociativo

Ahora leeremos los datos XML del archivo y convertiremos el XML a un array usando PHP.

Leer el fichero y convertirlo a string usando la función file_get_contents() de PHP.

  • Convertir el string XML en un objeto utilizando la función simplexml_load_string() en PHP.
  • Convertir el objeto en JSON usando la función json_encode().
  • Convertir los datos JSON en un array asociativo usando la función json_decode().
//xml file path
$path = "files/path-to-document.xml";

//read entire file into string
$xmlfile = file_get_contents($path);

//convert xml string into an object
$xml = simplexml_load_string($xmlfile);

//convert into json
$json  = json_encode($xml);

//convert into associative array
$xmlArr = json_decode($json, true);
print_r($xmlArr);

El siguiente código convierte el fichero XML al siguiente array asociativo.

Array
(
    [title] => Users Information
    [totalRows] => 3
    [rows] => Array
        (
            [user] => Array
                (
                    [0] => Array
                        (
                            [name] => John Doe
                            [email] => [email protected]
                        )

                    [1] => Array
                        (
                            [name] => Merry Moe
                            [email] => [email protected]
                        )

                    [2] => Array
                        (
                            [name] => Hellary Riss
                            [email] => [email protected]
                        )

                )

        )

)

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP