xml2array: PHP XML Parser

xml2array es un función escrita en PHP que nos permitirá convertir rápidamente datos en formato XML a un array con lo cual será sencillo acceder a cada una de sus propiedades y atributos. Esta función es especialmente útil en PHP4 pues no contiene métodos sencillos para la manipulación de XML como si lo tiene PHP5.

Obteniendo la función
Para descargar esta función, es necesario acceder a la web del autor de xml2array, copiar el código allí mostrado en un archivo llamado xml2array.php o al archivo donde estén nuestras funciones.

Utilizando xml2array
Luego para utilizar esta función le pasamos como parámetro un texto que contiene el XML y lo devolverá automáticamente en array, entonces si queremos acceder a un archivo que contiene el XML utilizaremos la función file_get_contents previamente.

[php]
require(“xml2array.php”);
$contents = file_get_contents(‘demo.xml’);
$result = xml2array($contents);
print_r($result);
[/php]

Nótese que hemos utilizado print_r, el cual imprime un array tabulado para facilitar la lectura. Veamos un ejemplo práctico de como se accede a los datos utilizando esta función.

[xml]


PHP
Python
JSP
Ruby

[/xml]

Luego de utilizar esta función los datos se encuentran formateados de la siguiente forma:

[php]
Array
(
[lang] => Array
(
[attr] => Array
(
[type] => interpreted
)
[name] => Array
(
[0] => Array
(
[value] => PHP
[attr] => Array ( [id] => 1 )
)
[1] => Array
(
[value] => Python
[attr] => Array ( [id] => 2 )
)
[2] => Array
(
[value] => JSP
[attr] => Array ( [id] => 3 )
)
[3] => Array
(
[value] => Ruby
[attr] => Array ( [id] => 4 )
)
)
)
)
[/php]

Entonces si deseamos conocer cuales son los valores de los lenguajes con sus respectivos identificadores, tendríamos:

[php]
require(“xml2array.php”);
$contents = file_get_contents(‘data.xml’);
$result = xml2array($contents);

$langs = $result[‘lang’][‘name’];
for ($i=0; $ixml2array/index.php y el XML original el xml2array/data.xml. Como pueden ver una vez que esta convertido en XML es sencillo recorrer la información contenida en el array.

Comentarios Total 12 comentarios


MijT
Publicado: 02/12/2008 6:19 pm

Se ve interesante, lo voy a probar a ver qué tal va.

Jesus
Publicado: 15/12/2008 9:40 pm

hola, ante todo gracias por el script me fue muy util.
bueno ahora tengo una duda quisiera que al momento de leer un archivo xml por ejemplo el de un reproductor de audio donde alli se se tiene la url completa del audio, bueno como bien saben que la mayoria lo cambia el formato de mp3 a otro(por ejemplo brs,swf,..etc), bueno ahora quisiera que al momento de descagar el audio se convierta a un formato mp3(al original) para asi poder descargar los audios desde un archivo xml.
me refiero a esto, osea los cambian de formato pero en si sigue siendo un formato mp3

Crear Buscador de MP3 » unijimpe
Publicado: 15/02/2009 9:54 pm

[…] son devueltos como XML utilizaremos la clase xml2array del cual hemos comentado anteriormente en: xml2array: PHP XML Parser. […]

5n4K3
Publicado: 10/03/2009 6:22 am

Buenas!…esa funcion usa muchos recursos, prefiero usar
simplexml_load_file() (http://php.net/function.simplexml-load-file.php) para trabajar con xml, es genial y devuelve un objeto. Saludos!

IP Location con PHP » unijimpe
Publicado: 13/04/2009 10:31 pm

[…] PHP Como el resultado es un XML podríamos utilizar la función xml2array de la cual comentamos en xml2array: PHP XML Parser, entonces tendríamos el siguiente código para leer los datos del […]

IP Location con PHP | SinapsysMx.Net
Publicado: 03/05/2009 12:50 pm

[…] PHP Como el resultado es un XML podríamos utilizar la función xml2array de la cual comentamos en xml2array: PHP XML Parser, entonces tendríamos el siguiente código para leer los datos del […]

Sourcenx | API de Delicious con PHP
Publicado: 16/07/2009 8:39 pm

[…] Esto es básicamente lo que hace nuestra clase de delicious, también van a encontrar los métodos addUrl() y deleteUrl(), con una podrán agregar una nueva url y con la otra podran eliminar una url cargada. Recuerden que la respuesta de delicious va a ser siempre en formato xml, por eso les recomiendo utilizar la función xml2array. […]

Reporte del Clima con PHP y Google
Publicado: 19/10/2009 10:20 pm

[…] Utilizando PHP para mostrar los datos Ahora que ya sabes de donde obtener los datos los cargamos con PHP utilizando la función file_get_contents y posteriormente los convertimos en un array utilizando xml2array. […]

Hunterhos
Publicado: 18/03/2010 1:15 pm

Hola me gusto mucho este sitio la verdad me ayudado mucho y les doy mi mas grandes felicitacio por la web..

No se como o con quier pedir que hagan un tutorial sobre los paser de php xml..

lo que psa que tengo un codigo xml que quier utilizar en php ..
ya vi el tutorial http://blog.unijimpe.net/xml2array-php-xml-parser/

pero la verda no entendi como modiciarlo para mi propocito..

Ejemplo:
mi codigo contine para acceso mediante acceso remoto, conecciona a serve y visualizacion de imagenes ajenas de mi host..

quiero saber como puedo ver todo eso.. me interesa mucho saber como utilizar bien el paser de php.

Por el tiempo gracias

jaime
Publicado: 14/04/2010 11:49 am

graciass totales :D


[…] para nuestro proyecto de pruebas. xml2array.php Librería externa que se puede encontrar en http://blog.unijimpe.net/xml2array-php-xml-parser/ phpunit.php script de lanzamiento de phpunit que se obtiene con la instalación PEAR que se […]

pimus
Publicado: 01/09/2010 11:20 am

<?xml version="1.0" encoding="iso-8859-1"?>
<lang type="interpreted">
<name id="1">PHP</name>
<name id="2">Python</name>
<name id="3">JSP</name>
<name id="4">Ruby</name>
</lang>


Array
(
[lang] => Array
(
[attr] => Array
(
[type] => interpreted
)
[name] => Array
(
[0] => Array
(
[value] => PHP
[attr] => Array ( [id] => 1 )
)
[1] => Array
(
[value] => Python
[attr] => Array ( [id] => 2 )
)
[2] => Array
(
[value] => JSP
[attr] => Array ( [id] => 3 )
)
[3] => Array
(
[value] => Ruby
[attr] => Array ( [id] => 4 )
)
)
)
)


$contents = file_get_contents('data.xml');
$result = xml2array($contents);
$langs = $result['lang']['name'];
for ($i=0; $i<sizeof($langs); $i++) {
echo $langs[$i]['attr']['id']." - ".$langs[$i]['value'];
}

creo que he detectado un error pero es en la lectura del vector
suponiendo que solo tenemos un lenguaje en el archivo XML


<?xml version="1.0" encoding="iso-8859-1"?>
<lang type="interpreted">
<name id="1">PHP</name>
</lang>


Array
(
[lang] => Array
(
[attr] => Array
(
[type] => interpreted
)
[name] => Array
(
[attr] => Array
(
[value] => PHP
[attr] => Array ( [id] => 1 )
)
)
)
)

Al ejecutar esto te saca la mano pork la posicion
cero serian directamente los atributos


$langs = $result['lang']['name'];
for ($i=0; $i<sizeof($langs); $i++) {
echo $langs[$i]['attr']['id']." - ".$langs[$i]['value'];
}

Solucion despues de esta linea


$langs = $result['lang']['name'];
if(isset($langs['attr']))
{
$vAux= $langs;
unset($langs);
$langs[0]=$lvAux;
}

y ahora si podemos hacer el for

 

Comentar

En este blog los comentarios están moderados, serán mostrados cuando el administrador los apruebe. Por favor, evita comentarios ofensivos u obscenos por que no serán aprobados.
Si deseas publicar código fuente debes hacerlo entre las etiquedas <code> y </code>, además debes reemplazar los carácteres < por &lt; y > por &gt;.

(Requerido)

(Requerido, no será publicado)

(Requerido)

(Tags aceptados: <a> <em> <strong> <code> <ul> <li>)