Foros del Web » Programando para Internet » PHP »

Problemas con XMLReader... While dentro de While

Estas en el tema de Problemas con XMLReader... While dentro de While en el foro de PHP en Foros del Web. Para leer el siguiente XML utilizo el código que muestro. El While va pasando los nodos a variables y las voy imprimiendo en cada vuelta. ...
  #1 (permalink)  
Antiguo 17/12/2009, 13:59
 
Fecha de Ingreso: julio-2006
Ubicación: Montevideo
Mensajes: 34
Antigüedad: 17 años, 9 meses
Puntos: 0
Problemas con XMLReader... While dentro de While

Para leer el siguiente XML utilizo el código que muestro.
El While va pasando los nodos a variables y las voy imprimiendo en cada vuelta.

Código HTML:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<principal>
    <nodoloop>
        <nodo1>loop1 nodo1</nodo1>
        <nodo2>loop1 nodo2</nodo2>
    </nodoloop>
    <nodoloop>
        <nodo1>loop2 nodo1</nodo1>
        <nodo2>loop2 nodo2</nodo2>
    </nodoloop>
</principal> 

Código PHP:
$reader = new XMLReader();
$reader->open($ruta_archivo);

if(!
$reader->isValid()){
    while (
$reader->read()) {
        switch (
$reader->nodeType) {
           case (
XMLReader::ELEMENT):
              if (
$reader->localName == "loop") {
                
$node $reader->expand();
                
$dom = new DomDocument();
                
$n $dom->importNode($node,true);
                
$dom->appendChild($n);
                
$simple_xml simplexml_import_dom($n);
                     
$nodo1 $simple_xml->nodo1;
                     
$nodo2 $simple_xml->nodo2;
                     
                     echo 
$nodo1 " " $nodo2;

                }
            }
        }
    }
$reader->close
-------------EL PROBLEMA-------------------------------

Pero tengo un problema para leer este que tiene un nodo en un nivel mas bajo y necesito tener cargadas las variables tal cual explico mas abajo....

Código HTML:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<principal>
    <loop>
    	<nodo0>loop1 nodo0</nodo0>
    	<interior>
            <nodo1>loop1 interior1 nodo1</nodo1>
            <nodo2>loop1 interior1 nodo2</nodo2>
        <interior>
    	<interior>
            <nodo1>loop1 interior2 nodo1</nodo1>
            <nodo2>loop1 interior2 nodo2</nodo2>
        <interior>
    	<interior>
            <nodo1>loop1 interior3 nodo1</nodo1>
            <nodo2>loop1 interior3 nodo2</nodo2>
        <interior>                
    </loop>
    <loop>
    	<nodo0>loop2 nodo0</nodo0>
    	<interior>
            <nodo1>loop2 interior1 nodo1</nodo1>
            <nodo2>loop2 interior1 nodo2</nodo2>
        <interior>
    	<interior>
            <nodo1>loop2 interior2 nodo1</nodo1>
            <nodo2>loop2 interior2 nodo2</nodo2>
        <interior>
    	<interior>
            <nodo1>loop2 interior3 nodo1</nodo1>
            <nodo2>loop2 interior3 nodo2</nodo2>
        <interior>                
    </loop>
</principal> 

Código PHP:
//el codigo seria casi igual

$reader = new XMLReader();
$reader->open($ruta_archivo);

if(!
$reader->isValid()){
    while (
$reader->read()) {
        switch (
$reader->nodeType) {
           case (
XMLReader::ELEMENT):
              if (
$reader->localName == "loop") {
                
$node $reader->expand();
                
$dom = new DomDocument();
                
$n $dom->importNode($node,true);
                
$dom->appendChild($n);
                
$simple_xml simplexml_import_dom($n);
          
//leo el nodo0 que esta fuera del siguiente while
                     
$nodo0 $simple_xml->nodo0;

//..... aca como que tendría que hacer otro while del nodo interior 
//y obtener los valores, 
// $interiror1nodo1, $interiror1nodo2, $interiror2nodo1, etc
// y cargarlas en una variable dinámica,
//me imagino que trabajando con el nodo loop que tengo en $n lo puedo hacer
//pero no me sale, necesito luego de cada pasada de loop
//tener las variables para trabajarlas asi....
                     
                     
echo $nodo0 " " $interiror1nodo1 " " $interiror1nodo2 " " $interiror2nodo1.......;

                }
            }
        }
    }
$reader->close
No puedo lograr que complete ambos while... siempre pierdo alguno, lo de las variables dinámicas no hay problema, solo necesito leer todo el xml...

Como dato adjunto utilizo el XMLReader porque el xml es muy grande y por lo que leí por ahí hacerlo de esta forma consume menos recursos.

Muchas gracias a quien me ayude con esto....
  #2 (permalink)  
Antiguo 17/12/2009, 14:21
 
Fecha de Ingreso: julio-2006
Ubicación: Montevideo
Mensajes: 34
Antigüedad: 17 años, 9 meses
Puntos: 0
Respuesta: Problemas con XMLReader... While dentro de While

Yo mismo encontre la solución

Código PHP:
$reader = new XMLReader();
$reader->open($ruta_archivo);

if(!
$reader->isValid()){
    while (
$reader->read()) {
        switch (
$reader->nodeType) {
           case (
XMLReader::ELEMENT):
              if (
$reader->localName == "loop") {
                
$node $reader->expand();
                
$dom = new DomDocument();
                
$n $dom->importNode($node,true);
                
$dom->appendChild($n);
                
$simple_xml simplexml_import_dom($n);
          
//leo el nodo0 que esta fuera del siguiente while
                     
$nodo0 $simple_xml->nodo0;
            echo 
"<b>$nodo0 </b><br>";
                        
                foreach (
$simple_xml->interior as $inter) { 
                    echo 
"<b>$inter->nodo1</b> ";
                    echo 
"$inter->nodo2<br><br>"
                } 
                    
                }
            }
        }
    }
$reader->close
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:31.