Foros del Web » Programando para Internet » PHP »

Separar xml en php

Estas en el tema de Separar xml en php en el foro de PHP en Foros del Web. Hola amigos como estan, Vengo en busca de ayuda: Resulta que estoy generando un xml en php para enviarlo a un WebService y el webservice ...
  #1 (permalink)  
Antiguo 29/07/2009, 21:14
Avatar de bacdavi  
Fecha de Ingreso: junio-2006
Ubicación: http://localhost/
Mensajes: 351
Antigüedad: 17 años, 10 meses
Puntos: 7
Pregunta Separar xml en php

Hola amigos como estan,

Vengo en busca de ayuda:

Resulta que estoy generando un xml en php para enviarlo a un WebService y el webservice me retorna mis resultados en XML pero necesito separarlo a traves de valores he estado probando con explode y no funciona les dejo el codigo:

Código PHP:
<?
$mensaje
="
<REQUEST>
<QNT>30.00</QNT>
<TARJETA>40000000008845</TARJETA>
</REQUEST>
"
;
$ms=explode(" ",$mensaje);
echo 
$ms[0];
?>
Alguna solucion de como separar los valores por espacios, ya que con el explode no resulta nada.

Muchas gracias de antemano!
  #2 (permalink)  
Antiguo 29/07/2009, 21:56
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Separar xml en php

Usa un parser como SimpleXML para parsear los datos de tu XML.

Saludos.
  #3 (permalink)  
Antiguo 30/07/2009, 08:35
Avatar de bacdavi  
Fecha de Ingreso: junio-2006
Ubicación: http://localhost/
Mensajes: 351
Antigüedad: 17 años, 10 meses
Puntos: 7
De acuerdo Respuesta: Separar xml en php

Lo hice con SimpleXML y me funciono total!

Les dejo el codigo con la solucion:

Código PHP:
<?
$mensaje
="
<REQUEST>
<QNT>30.00</QNT>
<TARJETA>40000000008845</TARJETA>
</REQUEST>
"
;
//=================================
function subTree$s $tag ){
 if(
substr($s,0,1+strlen($tag))!='<'.$tag) return false;
 
$news='';
 for(
$i=1+strlen($tag);$i<strlen($s);$i++){
  if(
substr($s,$i,1) == '>') break;
 }
 
$news=substr($s,$i+1);
 if( 
substr($news,strlen($news)-strlen($tag)-3) !='</'.$tag.'>') return false;
 return(
substr($news,0,strlen($news)-strlen($tag)-3));
}
//=================================

$xml = new SimpleXMLElement($Mensaje);
$cantidad=subTree$xml->QNT->asXML() , 'QNT' );
echo 
$cantidad;
?>

Última edición por bacdavi; 30/07/2009 a las 09:01
  #4 (permalink)  
Antiguo 30/07/2009, 09:02
Avatar de bacdavi  
Fecha de Ingreso: junio-2006
Ubicación: http://localhost/
Mensajes: 351
Antigüedad: 17 años, 10 meses
Puntos: 7
Respuesta: Separar xml en php

Ouch, lo siento haber dicho que era solucionado todo, resulta que lo acabo de instalar en mi servidor que tiene php4 y no lo lee...

¿Alguna solución a esto??

Muchas Gracias por su ayuda!

Gracias GatorV
  #5 (permalink)  
Antiguo 30/07/2009, 10:37
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Separar xml en php

Si tienes PHP4 vas a tener que usar DOMXML, o buscar en Google un parser de SimpleXML para PHP4 aunque es un poco más lento.

Saludos.
  #6 (permalink)  
Antiguo 30/07/2009, 11:57
Avatar de bacdavi  
Fecha de Ingreso: junio-2006
Ubicación: http://localhost/
Mensajes: 351
Antigüedad: 17 años, 10 meses
Puntos: 7
Respuesta: Separar xml en php

hola GatorV gracias por tu ayuda, ahora si me quede estancado...

Fijate que en mi html impreso desde el browser me lo presenta asi:

Código HTML:
<REQUEST>
<QNT>30.00</QNT>
<TARJETA>40000000008845</TARJETA>
</REQUEST> 
Necesito separarlo para que me despliegue mas o menos asi:

Cantidad: Q.30.00
Tarjeta No. 40000000008845

Alguna forma de hacerlo en php??
  #7 (permalink)  
Antiguo 30/07/2009, 13:55
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Separar xml en php

Usa SimpleXML ya te lo comenté si buscas en Google puedes ver una clase diseñada para PHP4 y puedes usar tu mismo código.

De lo contrario usa DOMXML ese si esta disponible desde PHP4.

Saludos.
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 10:38.