Convertir XML a Array en PHP
PHP posee una completa API para la manipulación de archivos XML. Sin embargo, algunas veces queremos hacer cosas muy simples y no vale la pena construir manualmente un script que sirva de parser de un archivo XML. En esos casos, podemos hacer uso de una función llamada xml2array.
La idea es bastante simple: le pasamos como argumento el string de un archivo XML y nos retorna un array asociativo con los datos del mismo. Los pasos son los siguientes:
0. Descargar la función
Lo primero es descargar la función de aquí. Copias el código PHP y lo pones en un archivo con nombre xml2array.php
1. Ejecutar la función [ejemplo]
Debemos usar la función file_get_contents para obtener el string con el XML que pasaremos como parámetro a la función. Suponiendo que tenemos este archivo XML:
<?xml version="1.0" encoding="iso-8859-1"?>
<distros type="linux">
<nombre id="1">Gentoo</nombre>
<nombre id="2">Arch</nombre>
<nombre id="3">Exherbo</nombre>
</distros>
Podríamos usar xml2array así:
<?php
require("xml2array.php");
$contenido = file_get_contents('datos.xml');
$resultado = xml2array($contenido);
var_dump($resultado);
?>
El resultado sería el dump del array:
array(2) {
["distros"]=>
array(1) {
["nombre"]=>
array(6) {
[0]=>
string(6) "Gentoo"
[1]=>
string(4) "Arch"
["0_attr"]=>
array(1) {
["id"]=>
string(1) "1"
}
["1_attr"]=>
array(1) {
["id"]=>
string(1) "2"
}
[2]=>
string(7) "Exherbo"
["2_attr"]=>
array(1) {
["id"]=>
string(1) "3"
}
}
}
["distros_attr"]=>
array(1) {
["type"]=>
string(5) "linux"
}
}
Veamos un ejemplo un poco más avanzado. Vamos a procesar un documento XML que proporciona Mercado Libre con productos a la venta; además vamos a mostrar un listado HTML con dichos productos:
<?php
require("xml2array.php");
$contenido = file_get_contents('http://www.mercadolibre.com.co/jm/searchXml?as_categ_id=1648');
$resultado = xml2array($contenido);
$items = $resultado['response']['listing']['items']['item'];
foreach($items as $item)
if(isset($item['title'])){
echo "<p><a href='{$item['link']}'>";
echo "<img src='{$item['image_url']}'/><br/>";
echo "<b>{$item['title']}</b></a><br>";
echo "<em>{$item['subtitle']}</em><br>";
echo "<em>{$item['currency']}</em> {$item['price']}</p>";
}
?>
Ejecutando el ejemplo anterior obtendremos algo como lo siguiente:

Descarga de los ejemplos
Puedes descargar los archivos usados en los ejemplos anteriores. Ten en cuenta que la versión de la función que está en la descarga es la última a la fecha (1 de febrero de 2010). Aunque funciona muy bien, los autores tienden a actualizarla, así que podrías echar un vistazo a la página oficial en busca de nuevas versiones.
8 Comentarios | deja el tuyo



Hola amigo!
Soy Marvin desde Costa Rica. Por favor, podrias agregrame de nuevo en tu blogroll. Mi nuevo dominio y blog esta en marvinyfamilia.com.
Mi tematicas es la misma, GNU/Linux para principiantes.
Gracias
WTF? No puedo creer que ya no estés
Luego del cambio de plantilla perdí cosas de la categoría del blogroll y se desaparecieron los enlaces…. traté de poner los que me acordaba de memoria pero hubieron algunos que olvidé.
De verdad lo siento mucho amigo. Ya lo corrijo.
Un abrazo.
No te preocupes amigo. Veo que slago como “LInuxeando” y enlazado con mi anitugo dominio.
Por favor, puedes ponerme como “El blog de Marvin y familia” y enlazarlo a marvinyfamilia.com ?
Gracias
Listo
Gracias Cristian!
Ya puedes borrar este hilo de comentarios no relacionados al tema.
Por cierto, te felicito por el diseno del blog, al fin puedo leerlo sin forzar mi vista la color negro. La plantilla esta de lujo!!!
Hola Cristian, lo que te preguntare esta un poco fuera del tema, asi que te pido disculpas de adelantado pero es que no hallo respuesta en ningun sitio y como veo que lo manejas te quiero preguntar.
Hace menos de 2 semanas que tengo un blog en el que quiero que el tema principal sea Ubuntu y Java, aunque hay otros temas claro esta. Y lo que no se es como hacer que el codigo se vea asi, uso Wordpress tambien como CMS y eh instalado como 3 plugins para codigo, SyntaxHighlighter entre otros, pero cuando quiero usarlo no veo la diferencia.
Usualemente hago esto:
public class Hola{
public static void main(String args[]){
System.out.println(“Hola, Como estas?”);
}
}
pero no hace nada, lo pongo tal cual en la entrada…
No eh podido poner tutos de Java por que estoy quedado en eso
Saludos;
Hola…
Añádeme al Gtalk y te ayudo cuando pueda: cristian ARROBA elhacker PUNTO net
Un saludo!
Oh pero mira se fueron las etiketas…
“Codigo aki”