Ver Mensaje Individual
  #1 (permalink)  
Antiguo 24/07/2011, 22:10
griever759
 
Fecha de Ingreso: noviembre-2004
Mensajes: 15
Antigüedad: 20 años, 1 mes
Puntos: 0
simpleXML y XML muy grande

Antes que nada un saludo a todos y gracias por leer mi mensaje, la ayuda que puedan brindarme sera bien recibida.

Les platico mi problema.

En mi trabajo estamos usando webservice escritos en php, de los cuales la respuesta que recibimos es grande, hablamos de unos 2 mb de xml.

El request hacia dicho webservice y el xml que me regresan como respuesta llegan en su totalidad, sin embargo cuando intento interpretar ese xml y convertirlo a objeto u arreglo, no lo hace.

Para procesar el xml uso simpleXMLElement(); - simplexml_load_string();

Ya se probo con DOM. Pero este no soporto ni la mitad de lo que me soporta el simpleXML

Hice una prueba y el xml de respuesta lo guarde en un archivo al cual llame desde otro archivo php llamado "xml_to_object.php" el cual solo tenia la ejecucion de simpleXML_load_string(); y ahi si lo proceso, el tamaño de la conversion fue de 7,6 mb.

El problema es cuando intento ejecutar todo desde un mismo archivo, el post al webservice, recoger la respuesta y procesar, siempre en la parte de procesar muere no da ninguna salida.

No se a que se deba y me gustaria saber si alguno podria orientarme o ya se ha topado con un problema asi.

primero hago un require de mi clase nusoap para la peticion al webservice.

luego tengo puesto un formulario con un textarea donde pego el xml que envio al hacer clic en "enviar"

luego tengo un isset con el que compruebo si esta activada la respuesta a mi peticion y dentro de esa condicion esta mi proceso

donde hago la llamada al webservice con nusoap, donde la respuesta(2mb) la almaceno en una variable y luego donde la intento pasar a objeto con el simplexml_load_string();

Si alguien tiene alguna idea que pueda ayudarme estaria muy agradecido.

Sin mas muchisimas gracias y estamos en contacto :)

Código PHP:
<?

  
require('nusoap.php');

echo 
'
<form method="post">
    
    <textarea style="width: 100%; height: 350px;" name="xml">' 
str_replace"\\\"""\""$_POST['xml'] ) . '</textarea>
    
    <input type="submit" name="submit" value="Enviar" />
    
</form>
    '
;

if ( isset( 
$_POST['submit'] ) ) {
    
    
$xml str_replace"\\\"""\""$_POST['xml'] );
        
    
$wsdl 'url_del_web_service'
    
    
$client = new nusoap_client(
        
$wsdl
        
false,
        
'',
        
'',
        
'username',
        
'password'
        
);
    
    
$client->setUseCurltrue );
    
    
$client->soap_defencoding 'UTF-8';
    
    
$client->send$xml''); // Peticion al web service

    
$file fopen("file.xml","w");
  
    
$return $client->response// XMl de respuesta
    
    
$return substr$returnstrpos$return"<" ) );
    
    
fwrite$file$return ); // Guardado en archivo. Al principio no se guardaba solo se almacenaba en una variable
    
    
fclose($file);
 
     if ( 
$newXML file_get_contents('file.xml') ) { // Lectura del contenido
        
        
$newXML substr$newXMLstrpos$newXML"<" ) );
        
                if( ! empty( 
$newXML ) ) { echo "newXML setup ok"; } // Comprobando que se pudo leer y alamacenar todo
                
         
$obj simplexml_load_string$newXML ); // Funcion que crea el objeto, aqui muere !!
         
         
print_r$obj ); // Toma la variable como vacia puesto que no hace la converción.
         
         
if( empty ( $obj ) ) { echo "false"; }  // Esto ya no lo hace  apartir del intento de conversion ignora cualquier otra linea del archivo.
        
     
} else { 
        
        echo 
"no"
        
        }