Crear XML con PHP (IV)

Facebooktwittergoogle_pluslinkedinmailFacebooktwittergoogle_pluslinkedinmail

En artículos anteriores hemos hablado de la creación de un XML a partir de los datos de una matriz de memoria. Uno de los puntos en que hemos insitido es en que, para lograr el resultado deseado, es necesario conocer, de antemano, la estructura de la matriz. Esto nos permite decidir, al construir el XML, cuáles serán los elementos, los atributos que tendrá, etc.

Desafortunadamente, hay ocasiones en que, por alguna razón, debemos convertir una matriz a XML sin conocer la estructura de dicha matriz. Hacer esto es posible, gracias a una función desarrollada para ello por autores independientes, dentro de la gran comunidad de usuarios de PHP. Presenta la limitación de que cada elemento de la matriz se va a convertir en un nodo de XML, no pudiendo disponer de algunos elementos como atributos. Es decir, sacrifica la flexibilidad de diseño del XML en favor de una universalización de la conversión.

LA MATRIZ DE DATOS

Aunque la función que vamos a ver en este artículo nos permite convertir una matriz cualquiera, sea cual sea su estructura, en un XML, aquí vamos a reproducir la matriz de ejemplo que empleamos, con fines didácticos, para que veas un poco más claro el proceso. Partimos de una matriz de usuarios de una web de comercio electrónico, donde consta su login, password, fecha de alta y algunos datos de pedidos que estos usarios han efectuado. La matriz puede tener un aspecto cómo el siguiente:

Esta matriz la hemos generado por código (para los efectos didácticos no necesitamos recurrir a una fuente externa de datos), con el siguiente fragmento:

Cómo hemos dicho, la matriz se muestra a efectos didácticos. Lo único que debemos tener presente (y que debemos comunicarle al desarrollador que nos vaya a proporcionar la matriz de datos) es que estos no deben ir en el primer nivel de anidamiento de la matriz, sino colgando de un elemento global, que abrque a todos los contenidos. Para entendernos. Observa que en la línea resaltada se definen todos los usuarios dentro de un elemento global llamado usuarios. Si observas la matriz que hemos listado anteriormente verás, también en la línea resaltada, que todos los elementos usuario, con sus datos y pedidos, están dentro del elemento global usuarios. Para aplicar la solución que vamos a ver en este artículo es necesario definir toda la estructura de la matriz dentro de un elemento global.

LA FUNCIÓN xml_encode()

Esta es la función PHP que convierte la matriz a un XML. Observa el siguiente listado:

Ya lo único que tenemos que hacer es invocar a la función, pasándole, como argumento, la matriz deseada, así:

Al ejecutar nuestro script, conteniendo los elementos listados, veremos en pantalla el siguiente resultado:

Como ves, ningún nodo tiene atributos, sino que todo se organiza en nodos y subnodos. Además, la generación de los nombres de estos es un poco… “antinatural”, a falta de una palabra mejor. En general, el resultado es una estructura bastante rígida, pero es lo mejor a que podemos aspirar si tenemos la limitación de no poder conocer previamente la estructura de la matriz. Si la conociéramos, recurriríamos a las metodologías vistas en los artículos anteriores, que dan más juego.

     

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *