Parsear XML a Array en PHP

MisKo

Buenas tardes !!

Estoy haciendo unas pruebas con php y XML , y necesito pasar la respuesta del XML a un Array en PHP.

Despues de buscar he probado la funcion que trae php por defecto: xml_parse_into_struct , pero no me gusta lo que hace, ya que de esto:

<?xml version='1.0' encoding='utf-8'?>
<Respuesta>
	<Mensaje>Hola Jose</Mensaje> 
</Respuesta>

me crea esto...

Array
(
    [0] => Array
        (
            [tag] => RESPUESTA
            [type] => open
            [level] => 1
            [value] => 
	
    )

[1] => Array
    (
        [tag] => MENSAJE
        [type] => complete
        [level] => 2
        [value] => Adios Jose
    )

[2] => Array
    (
        [tag] => RESPUESTA
        [value] =>  

        [type] => cdata
        [level] => 1
    )

[3] => Array
    (
        [tag] => RESPUESTA
        [type] => close
        [level] => 1
    )

)

Y la idea que tengo , es que me creara algo del tipo

$array[RESPUESTA][MENSAJE] = "Adios Jose" ;

Asi que, simplemente abro esto para preguntar, si usais alguna librería especifica que haga lo que yo pido ( o que se acerque )

Gracias =)

Tig

Yo he usado funciones incluídas en php.

http://php.net/manual/es/function.simplexml-load-string.php

ó

http://www.php.net/manual/es/function.simplexml-load-file.php

Me resultó un poco confuso al principio aprender a manejar lo que devuelve (http://www.php.net/manual/es/class.simplexmlelement.php), pero te acostumbras.

Con este SimpleXMLElement luego puedes construir tus propias estructuras de datos o hacer lo que te de la gana, ahora no recuerdo como es su print_r, pero igual te sirve.

1 respuesta
MisKo

Esas no las conocia, voy a probar esta: simplexml_load_string y te cuento a ver, por que voy a hacer pruebas con XMLs mas largos =)

Ahora pongo por aqui un XML "largo" y lo que me genera la funcion, por si le interesa a alguien.

EDIT: pues dicho y hecho, de momento me gusta mas esto, ademas para lo que quiero esta de lujo.

Voy a poner el XML y el print_r en spoilers por que son largos

XML Inicial
print_r del objeto generado con simplexml_load_string

Forma de recuperar la lista de ciudades

        foreach($a->Table as $object)
            echo $object->City."<br>" ;

#2 ire practicando con el, pero sobre todo es mas adelante, qndo tenga que traer informacion de un werbservice cuando le de mas uso, pero veo que me va a servir bastante.

Si para entonces me sigue funcionando tan way, pondre mas ejemplos por aqui, y si no, pondre alguna otra solucion que haya encontrado =)

Usuarios habituales

  • MisKo
  • Tig