Foros del Web » Programando para Internet » PHP »

error con simplexml_load_string

Estas en el tema de error con simplexml_load_string en el foro de PHP en Foros del Web. Hola!!, tengo un problema al parsear una respuesta de un WS que me devuelve en una variable ($respuesta), esta variable toma la estructura XML, de ...
  #1 (permalink)  
Antiguo 23/06/2010, 10:18
 
Fecha de Ingreso: marzo-2002
Mensajes: 299
Antigüedad: 22 años, 2 meses
Puntos: 1
error con simplexml_load_string

Hola!!, tengo un problema al parsear una respuesta de un WS que me devuelve en una variable ($respuesta), esta variable toma la estructura XML, de la siguiente forma:

<?xml version="1.0" encoding="utf-8" ?>
- <response>
<requestid />
<confirmacion>60103390</confirmacion>
<airlinepnr />
<total>1266.667</total>
<atendidopor>Juan Romo</atendidopor>
</response>

lo sé, porque imprimo el varlo de la variable que tiene esta respuesta del WS, ahora lo que quiero es parsear esa respuesta para poder manipular esos datos, para lo cual utilizo simplexml_load_string de la siguiente forma:

$xml = simplexml_load_string($respuesta);

y quiero acceder a sus valores de la siguiente forma:

echo "El número de confirmación es: ".$xml->confirmacion;

pero me marca el siguiente error:

No se puede mostrar la página XML
No se puede ver la entrada XML con la hoja de estilo XSL. Corrija el error y haga clic en el botón Actualizar, o inténtelo de nuevo más tarde.
--------------------------------------------------------------------------------
Se encontró un carácter no válido en el contenido del texto. Error al procesar el recurso http://127.0.0.1/smartprice/distr...

</response>Se ha confirmado su reservaci


Qué estoy haciendo mal??, desde ya gracias por su atención y ayuda.
  #2 (permalink)  
Antiguo 23/06/2010, 10:20
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: error con simplexml_load_string

Trata usando utf8_decode y luego parsea el contenido.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 23/06/2010, 10:39
 
Fecha de Ingreso: marzo-2002
Mensajes: 299
Antigüedad: 22 años, 2 meses
Puntos: 1
Respuesta: error con simplexml_load_string

Gracias abimaelrc,

Hice lo siguiente :

$aux=utf8_decode($respuesta);
$xml = simplexml_load_string($aux);

y me sigue marcando el mismo error.
  #4 (permalink)  
Antiguo 23/06/2010, 10:43
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: error con simplexml_load_string

Bueno intenté este código y funcionó correctamente
Código PHP:
Ver original
  1. <?php
  2. $respuesta = '<?xml version="1.0" encoding="utf-8" ?>
  3. <response>
  4. <requestid />
  5. <confirmacion>60103390</confirmacion>
  6. <airlinepnr />
  7. <total>1266.667</total>
  8. <atendidopor>Juan Romo</atendidopor>
  9. </response>';
  10. $xml = simplexml_load_string($respuesta);
  11. echo $xml->confirmacion;
Si no te funciona con utf8_decode trata con utf8_encode. ¿Cuál es el encoding del archivo PHP que estás usando? ¿UTF8 sin bom o ANSI?
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 23/06/2010, 10:53
 
Fecha de Ingreso: marzo-2002
Mensajes: 299
Antigüedad: 22 años, 2 meses
Puntos: 1
Respuesta: error con simplexml_load_string

ok, estoy usando UTF8

voy a tratar porque si te funciono no le veo porque de este lado no. mmmm, será la forma en la que la variable respuesta obtiene el XML, porque lo hago de la siguiente forma:

while(!feof($fp)){
$respuesta.=fread($fp,2048);
}

don $fp tiene la url de la dirección del WS
  #6 (permalink)  
Antiguo 23/06/2010, 10:55
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: error con simplexml_load_string

Trata lo que te indiqué de utf8_encode, lo más probable es que estás recibiendo los datos codificados como iso-8859-1 y al tener el archivo codificado con utf8 te da ese error.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #7 (permalink)  
Antiguo 23/06/2010, 11:12
 
Fecha de Ingreso: marzo-2002
Mensajes: 299
Antigüedad: 22 años, 2 meses
Puntos: 1
Respuesta: error con simplexml_load_string

Si, tienes mucha razón, ya hice prueba como la tuya y si funciona, el detalle está en la forma que estoy recibiendo los datos, ya probé con las dos instrucciones que me indicas:

$aux=utf8_decode($respuesta);
$xml = simplexml_load_string($aux);

y

$aux=utf8_encode($respuesta);
$xml = simplexml_load_string($aux);

y me marca el mismo error
  #8 (permalink)  
Antiguo 23/06/2010, 11:21
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: error con simplexml_load_string

Trata indicando el header. Mira estos ejemplos para que tengas una idea http://www.forosdelweb.com/f18/aport...ml-dom-792348/
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #9 (permalink)  
Antiguo 23/06/2010, 11:56
 
Fecha de Ingreso: marzo-2002
Mensajes: 299
Antigüedad: 22 años, 2 meses
Puntos: 1
Respuesta: error con simplexml_load_string

Gracias abimaelrc, problema resuelto, y funciona con quedó de la siguiente forma:

header("Content-type: text/html; charset=utf-8");
$aux=utf8_decode($respuesta);

o

$aux=utf8_encode($respuesta);

echo "Se ha confirmado su reservación <br>";
echo $xml->confirmationid;

con ambas utf8_decode y utf8_encode funciona, sólo que ahora no veo los caracteres acentuados :(,

Etiquetas: Ninguno
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 03:55.