Foros del Web » Programando para Internet » PHP »

Leer xml php

Estas en el tema de Leer xml php en el foro de PHP en Foros del Web. Hola que tal, les comento la situacion, resulta que estoy trabajando con dinerto mail, yo tengo que hacer una consulta para que ellos me manden ...
  #1 (permalink)  
Antiguo 07/06/2011, 13:19
Avatar de leo_nqn  
Fecha de Ingreso: abril-2010
Ubicación: Neuquen
Mensajes: 461
Antigüedad: 14 años
Puntos: 24
Pregunta Leer xml php

Hola que tal, les comento la situacion, resulta que estoy trabajando con dinerto mail, yo tengo que hacer una consulta para que ellos me manden un xml, con la respuesta (esta respuesta contiene datos de una transaccion), el formato de esta respuesta es XML, les muestro por ahora lo que hice esto:

Para obtener el xml:

Código:
<?php

include('config.php');

$dineromail_email = "[email protected]";
$dineromail_pin = "";
$dineromail_startdate=date("Ymd");
$dineromail_enddate=date("Ymd");

$url = 'http://argentina.dineromail.com/Vender/Consulta_IPN.asp';
$data = 'DATA=<REPORTE><NROCTA>XXXXXX</NROCTA><DETALLE><CONSULTA><CLAVE>XXXXX</CLAVE><TIPO>1</TIPO><OPERACIONES><ID>11</ID></OPERACIONES></CONSULTA></DETALLE></REPORTE>';

// parsea URL
$url = parse_url($url);

// obtiene host y path
$host = $url['host'];
$path = $url['path'];

// abre conexion en puerto 80
$fp = fsockopen($host, 80);
// request
fputs($fp, "POST $path HTTP/1.1\r\n");
fputs($fp, "Host: $host\r\n");
fputs($fp, "Referer: $referer\r\n");
fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
fputs($fp, "Content-length: ". strlen($data) ."\r\n");
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $data);

$result = ''; 
while(!feof($fp)) {
	// resultado del request
	$result .= fgets($fp, 128);
}

// cierra conexion
fclose($fp);

// separa el header del content
$result = explode("\r\n\r\n", $result, 2);

$header = isset($result[0]) ? $result[0] : '';
$content = isset($result[1]) ? $result[1] : '';

// imprime el content del resultado del request
echo $content."<br/>";
?>
El ultimo echo.. muestra el xml, lo pueden ver en la siguiente pagina:

http://www.myraffle.org/ipn_dineromail.php

Entren asi ven como lo muestra, y si le hacen click derecho se ve que es un XML, ahora yo necesito un dato de este XML, el dato es el que se encuentra en los tags: <ESTADO></ESTADO>

Pero no puedo tomarlo, probe con simple_xml_string ($content) y con un foreach para recorrer este string, y nada... alguien sabe como puedo obtener ese dato???
Espero sus respuestas, saludos y gracias!
__________________

Blog: http://leonardonqn.blogspot.com
Twitter:@Leo_FFerreyra
  #2 (permalink)  
Antiguo 07/06/2011, 13:22
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 2 meses
Puntos: 209
Respuesta: Leer xml php

foreach($xml as $datos)
{
$dato = (string)$datos->ESTADO
}
si es un atributo
$dato = (string)$datos[ESTADO]
  #3 (permalink)  
Antiguo 07/06/2011, 13:26
Avatar de leo_nqn  
Fecha de Ingreso: abril-2010
Ubicación: Neuquen
Mensajes: 461
Antigüedad: 14 años
Puntos: 24
Respuesta: Leer xml php

Gracias por tu ayuda, pero Me tira este error:

Warning: simplexml_load_string(): Entity: line 1: parser error : Start tag expected, '<' not found in /usr/local/pem/vhosts/109127/webspace/httpdocs/ipn_dineromail.php on line 53 Warning: simplexml_load_string(): 497 in /usr/local/pem/vhosts/109127/webspace/httpdocs/ipn_dineromail.php on line 53 Warning: simplexml_load_string(): ^ in /usr/local/pem/vhosts/109127/webspace/httpdocs/ipn_dineromail.php on line 53 Warning: Invalid argument supplied for foreach() in /usr/local/pem/vhosts/109127/webspace/httpdocs/ipn_dineromail.php on line 55
__________________

Blog: http://leonardonqn.blogspot.com
Twitter:@Leo_FFerreyra
  #4 (permalink)  
Antiguo 07/06/2011, 13:29
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 2 meses
Puntos: 209
Respuesta: Leer xml php

$xml = simplexml_load_file("url/ficha.xml.php?usr_id=2027&prp_id=$id");
foreach($xml->propiedad as $propiedad)
{
$tipoArray[$index] = (string)$propiedad->tip_desc;
}

esto es un ejemplo de como leo un xml
  #5 (permalink)  
Antiguo 07/06/2011, 13:32
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Leer xml php

Puedes usar XPath para recuperar el valor:

Código PHP:
Ver original
  1. $xml = new SimpleXMLElement($string);
  2. $resultado = $xml->xpath('/REPORTE/DETALLE/OPERACIONES/OPERACION/ESTADO');
  3.  
  4. foreach ($resultado as $valor)
  5.  echo $resultado; //Imprime lo que hay dentro de cada etiqueta <estado>
  #6 (permalink)  
Antiguo 07/06/2011, 13:37
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 2 meses
Puntos: 209
Respuesta: Leer xml php

pero lo que da el error ese es la pagina esa es decir no lo vas a poder leer así con errores

abri la url que diste y vi el codigo fuente de la pgina y tiene esos errores
  #7 (permalink)  
Antiguo 07/06/2011, 13:40
Avatar de leo_nqn  
Fecha de Ingreso: abril-2010
Ubicación: Neuquen
Mensajes: 461
Antigüedad: 14 años
Puntos: 24
Respuesta: Leer xml php

Alexg88:

Use xpath y me tira este error:

Warning: SimpleXMLElement::__construct(): Entity: line 1: parser error : Start tag expected, '<' not found in /usr/local/pem/vhosts/109127/webspace/httpdocs/ipn_dineromail.php on line 55 Warning: SimpleXMLElement::__construct(): 497 in /usr/local/pem/vhosts/109127/webspace/httpdocs/ipn_dineromail.php on line 55 Warning: SimpleXMLElement::__construct(): ^ in /usr/local/pem/vhosts/109127/webspace/httpdocs/ipn_dineromail.php on line 55 Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in /usr/local/pem/vhosts/109127/webspace/httpdocs/ipn_dineromail.php:55 Stack trace: #0 /usr/local/pem/vhosts/109127/webspace/httpdocs/ipn_dineromail.php(55): SimpleXMLElement->__construct('497??

Creo que estoy usando la variable incorrecta el codigo es el siguiente:

$xml = new SimpleXMLElement($content);
$resultado = $xml->xpath('/REPORTE/DETALLE/OPERACIONES/OPERACION/ESTADO');

foreach ($resultado as $valor){
echo $resultado; }

Creo que $content, contiene solo texto, pero como no entiendo lo que se hace con esta variable no lo puedo decifrar..
__________________

Blog: http://leonardonqn.blogspot.com
Twitter:@Leo_FFerreyra
  #8 (permalink)  
Antiguo 07/06/2011, 13:42
Avatar de leo_nqn  
Fecha de Ingreso: abril-2010
Ubicación: Neuquen
Mensajes: 461
Antigüedad: 14 años
Puntos: 24
Respuesta: Leer xml php

Iviamontes, me da error, por que estoy tratando de mostrar todo el tiempo ESTADO, de alguna manera... probe con este codigo:

$xml1 = simplexml_load_string($content);
foreach ($xml1->ESTADO as $dato1) {
echo $dato1->ESTADO;
}

y no funciona, mi duda es si la variable $ content contiene un XML?? por que si haces click derecho sobre la pagina que puse:
http://www.myraffle.org/ipn_dineromail.php
y ves el codigo fuente! se ve claro un XML, y para que se vea esto uso echo $content..
__________________

Blog: http://leonardonqn.blogspot.com
Twitter:@Leo_FFerreyra
  #9 (permalink)  
Antiguo 07/06/2011, 13:47
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 2 meses
Puntos: 209
Respuesta: Leer xml php

Cita:
Iniciado por leo_nqn Ver Mensaje
Iviamontes, me da error, por que estoy tratando de mostrar todo el tiempo ESTADO, de alguna manera... probe con este codigo:

$xml1 = simplexml_load_string($content);
foreach ($xml1->ESTADO as $dato1) {
echo $dato1->ESTADO;
}

y no funciona, mi duda es si la variable $ content contiene un XML?? por que si haces click derecho sobre la pagina que puse:
http://www.myraffle.org/ipn_dineromail.php
y ves el codigo fuente! se ve claro un XML, y para que se vea esto uso echo $content..
si tu duda es crear imprimi un xml

1 - header ('Content-type: text/xml');
2 - <?php
header("Content-type: text/xml");
//los arrays se podrían alimentar
//con datos extraidos de una base de datos
$imagenes = array('imagen1.jpg', 'imagen2.jpg', 'imagen3.jpg');
$titulos = array('un barco', 'un coche', 'retrato');
$enlaces = array('pagina1.html','pagina2.html','pagina3.html' );
echo '<?xml version="1.0"?>';
echo '<album>';
$pos = 0;
foreach ($imagenes as $valor) {
echo '<elemento>';
echo '<img>';
echo $valor;
echo '</img>';
echo '<titulo>';
echo $titulos[$pos];
echo '</titulo>';
echo '<src>';
echo $enlaces[$pos];
echo '</src>';
$pos++;
echo'</elemento>';
}
echo '</album>';
?>
  #10 (permalink)  
Antiguo 07/06/2011, 13:47
Avatar de leo_nqn  
Fecha de Ingreso: abril-2010
Ubicación: Neuquen
Mensajes: 461
Antigüedad: 14 años
Puntos: 24
Respuesta: Leer xml php

Saque el echo $ content... y al mirar el codigo fuente, no me muestra las etiquetas del XML, osea que esta variable tiene todo el XML, pero no entiendo por que no puedo levantarlo desde ahi!
__________________

Blog: http://leonardonqn.blogspot.com
Twitter:@Leo_FFerreyra
  #11 (permalink)  
Antiguo 07/06/2011, 13:49
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 2 meses
Puntos: 209
Respuesta: Leer xml php

te está faltando el paso 1 de lo q te explique, tienes que decirle al navegador que vas a mostrar un xml, para eso es la cabecera
  #12 (permalink)  
Antiguo 07/06/2011, 13:55
Avatar de leo_nqn  
Fecha de Ingreso: abril-2010
Ubicación: Neuquen
Mensajes: 461
Antigüedad: 14 años
Puntos: 24
Respuesta: Leer xml php

Creo que hay algo que no dije.. necesito ese dato en la hoja php que les mostre.. osea donde lo recibo quiero obtener el dato.
Agregue esto al codigo de ipn_dineromail.php:

header ('Content-type: text/xml');

$xml1 = simplexml_load_string($content);
foreach ($xml1->ESTADO as $dato1) {
echo $dato1->ESTADO;
}

y tira este error:

Warning: Cannot modify header information - headers already sent by (output started at /usr/local/pem/vhosts/109127/webspace/httpdocs/ipn_dineromail.php:52) in /usr/local/pem/vhosts/109127/webspace/httpdocs/ipn_dineromail.php on line 53 Warning: simplexml_load_string(): Entity: line 1: parser error : Start tag expected, '<' not found in /usr/local/pem/vhosts/109127/webspace/httpdocs/ipn_dineromail.php on line 55 Warning: simplexml_load_string(): 497 in /usr/local/pem/vhosts/109127/webspace/httpdocs/ipn_dineromail.php on line 55
__________________

Blog: http://leonardonqn.blogspot.com
Twitter:@Leo_FFerreyra
  #13 (permalink)  
Antiguo 07/06/2011, 13:56
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Leer xml php

Yo no creo que lo que quiera imprimir el xml, sólo quiere obtener lo que hay en la etiqueta <estado>, lo de imprimir es para que viésemos el xml (eso creo).

El problema que parece haber es que hay algún tipo de error en la cadena que representa el xml, porque no la analiza correctamente.
  #14 (permalink)  
Antiguo 07/06/2011, 13:58
Avatar de leo_nqn  
Fecha de Ingreso: abril-2010
Ubicación: Neuquen
Mensajes: 461
Antigüedad: 14 años
Puntos: 24
Respuesta: Leer xml php

exacto alexg88, pienso lo mismo que vos.. para mi hay un problema en $content, pero como mucho no entiendo de los fpgets y demas, no lo encuentro al error...
__________________

Blog: http://leonardonqn.blogspot.com
Twitter:@Leo_FFerreyra
  #15 (permalink)  
Antiguo 07/06/2011, 14:07
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 2 meses
Puntos: 209
Respuesta: Leer xml php

ahh, bueno mira para prueba, puedes guardar ese xml en un documento y entro archivo cargas ese xml para que puedas ir viendo, te da ese warning, pq tienes una salida antes del header, algun echo
  #16 (permalink)  
Antiguo 07/06/2011, 14:09
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: Leer xml php

Prueba un var_dump($content) para que veas el contenido de tu variable.

Saludos.
  #17 (permalink)  
Antiguo 07/06/2011, 14:11
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 2 meses
Puntos: 209
Respuesta: Leer xml php

mejor aun y te quitas de hacer lo que te decia arriba
  #18 (permalink)  
Antiguo 07/06/2011, 14:17
Avatar de leo_nqn  
Fecha de Ingreso: abril-2010
Ubicación: Neuquen
Mensajes: 461
Antigüedad: 14 años
Puntos: 24
Respuesta: Leer xml php

el var_dump me muestra esto:

string(1187) "497 1 11 06/06/2011 10:58:46 PM 2 18518398 [email protected] Gaston Daniel 42156896 DNI 30.945.865 4.21 3.45 1 0 Add Founds 1 4.21 1 DNI 36-54.852. 0
__________________

Blog: http://leonardonqn.blogspot.com
Twitter:@Leo_FFerreyra
  #19 (permalink)  
Antiguo 07/06/2011, 14:21
Avatar de leo_nqn  
Fecha de Ingreso: abril-2010
Ubicación: Neuquen
Mensajes: 461
Antigüedad: 14 años
Puntos: 24
Respuesta: Leer xml php

Ahora no entiendo por que cuando hago click derecho->ver codigo fuente, sobre la pagina me muestra esto:

Código:
<REPORTE>

  <ESTADOREPORTE>1</ESTADOREPORTE>

  <DETALLE>

    <OPERACIONES>

      <OPERACION>

        <ID>11</ID>

        <FECHA>06/06/2011 10:58:46 PM</FECHA>

        <ESTADO>2</ESTADO>

        <NUMTRANSACCION>18518398</NUMTRANSACCION>

        <COMPRADOR>

          <EMAIL>[email protected]</EMAIL>

          <DIRECCION />

          <COMENTARIO />

          <NOMBRE>Gaston Daniel</NOMBRE>

          <TELEFONO>42156896</TELEFONO>

          <TIPODOC>DNI</TIPODOC>

          <NUMERODOC>30.945.865</NUMERODOC>

        </COMPRADOR>

        <MONTO>4.21</MONTO>

        <MONTONETO>3.45</MONTONETO>

        <METODOPAGO>1</METODOPAGO>

        <MEDIOPAGO />

        <CUOTAS>0</CUOTAS>

        <ITEMS>

          <ITEM>

            <DESCRIPCION>Add Founds</DESCRIPCION>

            <MONEDA>1</MONEDA>

            <PRECIOUNITARIO>4.21</PRECIOUNITARIO>

            <CANTIDAD>1</CANTIDAD>

          </ITEM>

        </ITEMS>

        <VENDEDOR>

          <TIPODOC>DNI</TIPODOC>

          <NUMERODOC>36-54.852.</NUMERODOC>

        </VENDEDOR>

      </OPERACION>

    </OPERACIONES>

  </DETALLE>

</REPORTE>
__________________

Blog: http://leonardonqn.blogspot.com
Twitter:@Leo_FFerreyra
  #20 (permalink)  
Antiguo 07/06/2011, 14:27
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 2 meses
Puntos: 209
Respuesta: Leer xml php

pq ese es el xml... es por esa vista por la que te tienes que guiar...

prueba ahora con

$xml1 = simplexml_load_string($content);
foreach ($xml1->DETALLE->OPERACIONES->OPERACION as $dato1) {
echo $dato1->ESTADO;
}

me parece que ahora si, es que no sabia bien cual era tu estructura por no te daba bien el camino para leerlo, dime ahora
  #21 (permalink)  
Antiguo 07/06/2011, 14:30
Avatar de leo_nqn  
Fecha de Ingreso: abril-2010
Ubicación: Neuquen
Mensajes: 461
Antigüedad: 14 años
Puntos: 24
Respuesta: Leer xml php

Me tira este error:

Warning: simplexml_load_string(): Entity: line 1: parser error : Start tag expected, '<' not found in /usr/local/pem/vhosts/109127/webspace/httpdocs/ipn_dineromail.php on line 54 Warning: simplexml_load_string(): 497 in /usr/local/pem/vhosts/109127/webspace/httpdocs/ipn_dineromail.php on line 54 Warning: simplexml_load_string(): ^ in /usr/local/pem/vhosts/109127/webspace/httpdocs/ipn_dineromail.php on line 54 Warning: Invalid argument supplied for foreach() in /usr/local/pem/vhosts/109127/webspace/httpdocs/ipn_dineromail.php on line 55

Con el var dump($content).. no me muestra el XML, me muestra el string del contenido del xml... entonces cuando quiero recorrer esta varible... la funcion espera el tag '<' que no esta dentro de la variable!!! pero porque en codigo fuente muestra los tags! jajaja me estan saliendo canas!! jajaja
__________________

Blog: http://leonardonqn.blogspot.com
Twitter:@Leo_FFerreyra
  #22 (permalink)  
Antiguo 07/06/2011, 14:33
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 2 meses
Puntos: 209
Respuesta: Leer xml php

haz lo que te dije crea el xml y guardalo en un archivo local

y después cargarlo

y leelo, no lo hagas todo en el mismo archivo
  #23 (permalink)  
Antiguo 07/06/2011, 14:42
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: Leer xml php

Lo que pasa es que tu browser esta tratando de dibujar los tags, para que veas el contenido como tal prueba algo así:
Código PHP:
Ver original
  1. $xml = htmlspecialchars($content);
  2. var_dump($xml);

Saludos.
  #24 (permalink)  
Antiguo 07/06/2011, 14:59
Avatar de leo_nqn  
Fecha de Ingreso: abril-2010
Ubicación: Neuquen
Mensajes: 461
Antigüedad: 14 años
Puntos: 24
Respuesta: Leer xml php

Buenisimooo con ese codigo tengo el XML dentro de la variable.. probe esto para levantar lo que esta en el TAG <ESTADO> :

xml = htmlspecialchars($content);

$xml = new SimpleXMLElement($xml);
$resultado = $xml->xpath('/REPORTE/DETALLE/OPERACIONES/OPERACION/ESTADO');

foreach ($resultado as $valor){
echo $resultado; }

y me tira el error de siempre..
__________________

Blog: http://leonardonqn.blogspot.com
Twitter:@Leo_FFerreyra
  #25 (permalink)  
Antiguo 07/06/2011, 15:13
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Leer xml php

Estás mezclando lo que está diciendo GatorV con otra cosa. El te decía lo de escapar los caracteres especiales para que pudieses verlo en pantalla, pero no para utilizarlo como lo estás haciendo.

El problema lo estoy viendo claramente. Ese 497 que aparece al principio es el que te está dando el problema porque no es xml. Tienes que mirar si estás recogiendo bien el mensaje.
  #26 (permalink)  
Antiguo 07/06/2011, 15:26
Avatar de leo_nqn  
Fecha de Ingreso: abril-2010
Ubicación: Neuquen
Mensajes: 461
Antigüedad: 14 años
Puntos: 24
Respuesta: Leer xml php

haaaaa ok ok ! gracias voy a ver si entiendo como recoger bien el mensaje... gracias por su ayuda.. igual si alguien tiene la solucion en el codigo.. la verdad lo agradeceria!! disculpen las molestias! y muchas gracias por su aporte!!!!
__________________

Blog: http://leonardonqn.blogspot.com
Twitter:@Leo_FFerreyra

Etiquetas: 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 05:22.