Tema: Xml iterator
Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/06/2013, 03:48
jcd
 
Fecha de Ingreso: febrero-2013
Mensajes: 77
Antigüedad: 11 años, 10 meses
Puntos: 0
Xml iterator

Muy buenas!
Primero agradeceros que leais esto:

a ver, tengo un objeto xml , cuyos tags están en minúsculas y por una razón que no importa mucho, quiero convertir ese mismo objeto a sí mismo pero con los tags en mayúsculas.

entonces, para ello, supongo que habrá varios métodos, pero yo quiero hacer, por obligación, esto:

1) creo un nuevo objeto XMLElement, y le meto la raíz.
2)voy recorriendo el objeto que ya tengo, y con la info que voy extrayendo de el, voy , mediante ::addchild rellenando el objeto vacío que tengo.

MUY IMPORTANTE ES QUE TODO TIENE QUE SER TIPO OBJETO.

código:
Código XML:
Ver original
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <Raiz>
  3.   <User>yo</User>
  4.   <Pass>olist</Pass>
  5.   <nodo>
  6.         <Nodo3>137</Nodo>
  7.         <Nodo4>ty</Nodo4>
  8.         <Nodo5>Plot</Nodo5>
  9.         <Nodo6>yui</Nodo6>
  10.         <Nodo7>contenido</Nodo7>
  11.         <Nodo8>content</Nodo8>
  12.         <Nodo9>
  13.                 <Nodo10>Olias</Nodo10>
  14.                 <Nodo11>1</Nodo11>
  15.                 <Nodo12>Pepe</Nodo12>
  16.         </Nodo9>
  17.     </nodo>
  18. </raiz>

y este es el mío, que cuando funcione reharé con funcion recursiva

Código HTML:
Ver original
  1. <?php
  2.  
  3. $catched = simplexml_load_file("xml.xml"); // takes an XML file and converts it to an simpleXML object
  4.  
  5. $newobject= new simpleXMLElement("<?xml version=\"1.0\" encoding=\"UTF-8\"?><CustomsRequest></CustomsRequest>"); //creates a new object , it needs the root as an enter
  6.  
  7. foreach ($catched->Children() as $child)
  8.         {
  9.         $newobject->addchild(strtoupper($child->getName()),$child);//getName returns a string, so does $child, addchild returns an object.
  10.                 foreach ($child->Children() as $subchild)
  11.                 {
  12.                     $newobject->addchild(strtoupper($subchild->getName()),$subchild);
  13.                             foreach ($catched->Children() as $child)
  14.                             {
  15.                               $newobject->addchild(strtoupper($child->getName()),$child);//getName returns a string, so does $child, addchild returns an object.
  16.                
  17.                             }
  18.                 }
  19.         }
  20.                                
  21.      echo var_dump($newobject)    ;                    
  22. ?>

como veis, tood funciona bien hasta que se encuentra con un nodo hijo que a su vez tiene hijos, aqui, no realiza a vovesión a objeto sino que sale un elemento [o] que supongo que será un array de objetos dode guarda todos los nodos hijos.

lo que quiero es , que cuando haga print_r ($newobject), no me salga eso, sino que me salga el mismo formato que $catched.

he intentado usar XMLIterator pero no he visto forma de hacer esto con esa clase, aunque tampoco soy muy ducho en esto.

si alguien me puediera echar una mano se lo agradecería.
Un Saludo

Última edición por jcd; 14/06/2013 a las 10:53