Foros del Web » Programando para Internet » PHP »

PHP OO recorre un array multidimencional traido de un xml

Estas en el tema de recorre un array multidimencional traido de un xml en el foro de PHP en Foros del Web. hola buen dia, estoy tratando de recorre un array que me arroja un xml pero no he podido leerlo completo, ya intente con foreach anidados ...
  #1 (permalink)  
Antiguo 22/07/2011, 13:03
Avatar de linux_car  
Fecha de Ingreso: agosto-2010
Mensajes: 18
Antigüedad: 14 años, 3 meses
Puntos: 0
Pregunta recorre un array multidimencional traido de un xml

hola buen dia, estoy tratando de recorre un array que me arroja un xml pero no he podido leerlo completo, ya intente con foreach anidados y con while pero ni asi el array es este. lo imprimi con print_r();

y el resultado esta en : [URL="http://www.saraycarlos.com"]www.saraycarlos.com[/URL]

he podido accedes de forma indivial a cada uno de estos elementos de la sig forma

#################### COMPROBANTE FISCAL ########################
echo "folio=", $xml['folio'];
echo "<br>version=", $xml['version'];
echo "<br>forma de pago=", $xml['formaDePago'];
echo "<br>Nocetificado=", $xml['noCertificado'];
echo "<br>cetificado=", $xml['certificado'];
echo "<br>fecha=", $xml['fecha'];
echo "<br>subTotal=", $xml['subTotal'];
echo "<br>total=", $xml['total'];
echo "<br>tipo de comprobante=", $xml['tipoDeComprobante'];
echo "<br>No Aprobacion=", $xml['noAprobacion'];
echo "<br>serie=", $xml['serie'];
echo "<br>folio=", $xml['sello'];
####################EMISOR######################## ###
echo "<br><hr>rfc =", $xml->Emisor['rfc'];
echo "<br> Emisor=", $xml->Emisor['nombre'];
////////////////////////DOMICILIO FISCAL///////////////////////
echo "<br>DomicilioFiscal=", $xml->Emisor->DomicilioFiscal['calle'];
echo "<br> no exterior=", $xml->Emisor->DomicilioFiscal['noExterior'];
echo "<br>no interior =", $xml->Emisor->DomicilioFiscal['noInterior'];
echo "<br> colonia=", $xml->Emisor->DomicilioFiscal['colonia'];
echo "<br> minicipio=", $xml->Emisor->DomicilioFiscal['municipio'];
echo "<br> estado=", $xml->Emisor->DomicilioFiscal['estado'];
echo "<br>pais =", $xml->Emisor->DomicilioFiscal['pais'];
echo "<br>codigoPostal=", $xml->Emisor->DomicilioFiscal['codigoPostal'];
####################RECEPTOR####################
echo "<br><hr>rfc=", $xml->Receptor['rfc'];
echo "<br> nombre=", $xml->Receptor['nombre'];
//////////////////DOMICILIO////////////////
echo "<br>no calle =", $xml->Receptor->Domicilio['calle'];
echo "<br> no exterior=", $xml->Receptor->Domicilio['noExterior'];/*falta numero interior hay q checar q onda!!!
echo "<br> No interior=", $xml->Receptor->Domicilio['noInterior'];
echo "<br> referencia=", $xml->Receptor->Domicilio['referencia'];
echo "<br> municipio=", $xml->Receptor->Domicilio['municipio'];
echo "<br> estado=", $xml->Receptor->Domicilio['estado'];
echo "<br>pais =", $xml->Receptor->Domicilio['pais'];
echo "<br>codigoPostal=", $xml->Receptor->Domicilio['codigoPostal'];
####################CONCEPTOS####################
echo "<br><hr>cantidad=", $xml->Conceptos->Concepto[0]['cantidad'];
echo "<br>noIdentificacion=", $xml->Conceptos->Concepto[0]['noIdentificacion'];
echo "<br>descripcion=", $xml->Conceptos->Concepto[0]['descripcion'];
echo "<br> valorUnitario=", $xml->Conceptos->Concepto[0]['valorUnitario'];
echo "<br> importe=", $xml->Conceptos->Concepto[0]['importe'];
echo "<br><hr>cantidad=", $xml->Conceptos->Concepto[1]['cantidad'];
echo "<br>noIdentificacion=", $xml->Conceptos->Concepto[1]['noIdentificacion'];
echo "<br>descripcion=", $xml->Conceptos->Concepto[1]['descripcion'];
echo "<br> valorUnitario=", $xml->Conceptos->Concepto[1]['valorUnitario'];
echo "<br> importe=", $xml->Conceptos->Concepto[1]['importe'];
####################IMPUESTOS####################
echo "<br><HR> IMPUESTOS=", $xml->Impuestos['totalImpuestosTrasladados'];
//////////////TRANLADOS///////////////////////////
echo "<br>IMPUESTO=", $xml->Impuestos->Traslados->Traslado['impuesto'];
echo "<br>TASA=", $xml->Impuestos->Traslados->Traslado['tasa'];
echo "<br>IMPORTE=", $xml->Impuestos->Traslados->Traslado['importe'];


pero siempre varian los elementos de cada subarray, como puedo hacer que un foreach anidado me arroje todos los resultado. espero su respuesta compañeros y gracias :) me estoy volviendo loco :(
  #2 (permalink)  
Antiguo 22/07/2011, 13:43
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 9 meses
Puntos: 288
Respuesta: recorre un array multidimencional traido de un xml

tenes que hacer una funcion recursiva, en php.net creo que hay un ejemplo
  #3 (permalink)  
Antiguo 22/07/2011, 15:47
Avatar de linux_car  
Fecha de Ingreso: agosto-2010
Mensajes: 18
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: recorre un array multidimencional traido de un xml

Gracias Patriarka, ya encontre la funcion y creo q si es lo q necesito. voy a probar 99% seguro de que me funcione :)
  #4 (permalink)  
Antiguo 22/07/2011, 16:00
Avatar de linux_car  
Fecha de Ingreso: agosto-2010
Mensajes: 18
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: recorre un array multidimencional traido de un xml

este fue lo que encontre y lo adapte a mi codigo pero me da un error


Código PHP:
<?php
$myArray 
=$xml simplexml_load_file('test.xml');

$iterator = new RecursiveArrayIterator($myArray);
iterator_apply($iterator'traverseStructure', array($iterator));

function 
traverseStructure($iterator) {
   
    while ( 
$iterator -> valid() ) {

        if ( 
$iterator -> hasChildren() ) {
       
            
traverseStructure($iterator -> getChildren());
           
        }
        else {
            echo 
"<br>".$iterator -> key() . ' : ' $iterator -> current();   
        }

        
$iterator -> next();
    }
}
?>
y el error es :


Fatal error: Uncaught exception 'InvalidArgumentException' with message 'Overloaded object of type SimpleXMLElement is not compatible with RecursiveArrayIterator' in C:\wamp\www\fpdf\EstudioPracticas\ArrayRecursivo.p hp:4 Stack trace: #0 C:\wamp\www\fpdf\EstudioPracticas\ArrayRecursivo.p hp(4): ArrayIterator->__construct(Object(SimpleXMLElement)) #1 {main} thrown in C:\wamp\www\fpdf\EstudioPracticas\ArrayRecursivo.p hp on line 4

Etiquetas: multidimencional, xml
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 12:28.