• Publicidad

Problema al obtener xml

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Problema al obtener xml

Notapor willbender » 2012-08-27 12:59 @582

Buen día. ¿Me pueden ayudar con este tema?

Tengo el siguiente código:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. sub gets {
  2.     my $xml   = 'mensaje xml q envio';
  3.     my ($url) = @_;
  4.     my $curl  = new WWW::Curl::Easy;
  5.     $curl->setopt( CURLOPT_URL,            $url );
  6.     $curl->setopt( CURLOPT_CONNECTTIMEOUT, 30 );
  7.     $curl->setopt( CURLOPT_RETURNTRANSFER, 1 );
  8.     $curl->setopt( CURLOPT_POST,           1 );
  9.     $curl->setopt( CURLOPT_POSTFIELDS,     $xml );
  10.     $curl->setopt( CURLOPT_SSL_VERIFYPEER, 1 );
  11.     $curl->setopt( CURLOPT_SSLCERT,        'pem.pem' );
  12.     $curl->setopt( CURLOPT_SSLKEY,         'key.key' );
  13.     $curl->setopt( CURLOPT_SSL_VERIFYHOST, 1 );
  14.     $curl->setopt( CURLOPT_VERBOSE,        0 );
  15.     my $code = $curl->perform;
  16.  
  17. }
  18.  
  19. my $test = gets("https://webserver.webserver/");
  20.  
  21. print $test. "\n\n\n";
  22.  
  23. $xml2    = new XML::Simple;
  24. $dataxml = $xml2->XMLin($test);
  25.  
  26. print $dataxml. "\n\n\n";
  27.  
  28. print $dataxml->{payment_transactions}->{payment_transaction}->{filing_date} . "\n";
  29. print $dataxml->{payment_transactions}->{payment_transaction}->{receiver}->{contact_phone} . "\n";
  30. print $dataxml->{payment_transactions}->{payment_transaction}->{receiver}->{name}->{maternal_name} . "\n";
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


El problema es que me despliega este error "File does not exist: 0 at test.pl line 45." y la línea 45 es $dataxml = $xml2->XMLin(x$test);.

Al hacer la consulta e imprimirlo con la línea print $test."\n\n\n"; sí me devuelve lo que debe de devolverme el servidor web. ¿Por qué no funciona el XMLin? Ya probé tomando el xml que me devuelve y volviéndolo una variable y haciendo todo exactamente igual a partir de la línea $dataxml = $xml2->XMLin($test); y sí funciona, sí realiza los últimos print.

¿Alguien me puede ayudar con esto? No sé qué estoy haciendo mal.

Por cierto, el xml que me devuelve con el print siempre me pone un carácter "0" al final. ¿Será este el problema? Si lo fuera, ¿cómo hago para quitar ese carácter "0" del final del xml que me devuelve?

Gracias. Éxitos.
willbender
Perlero nuevo
Perlero nuevo
 
Mensajes: 24
Registrado: 2012-07-16 17:22 @765
Ubicación: Guatemala

Publicidad

Re: Problema al obtener xml

Notapor explorer » 2012-08-28 09:54 @454

Esto es lo que ocurre: en la línea 40 haces una llamada a la función gets(), para obtener un resultado y dejarlo en la variable $test. Dentro de la gets() haces una serie de cosas, y en la línea 36 llamas a perform(), que realiza las operaciones solicitadas. El resultado de la operación es un valor numérico que almacenas en $code. Como hemos llegado al final de la función y no hay ninguna instrucción return(), perl devuelve como valor de retorno de la función el resultado de la última instrucción ejecutada dentro de la función. Y la última ejecutada es la de la línea 36, así que el resultado de gets() es un valor numérico indicando si las operaciones cURL han funcionado o no. Si no hay ningún error, será un 0.

Y ese valor es que se almacena en la línea 40 en $test. Por eso sale un 0 en pantalla: lo estás imprimiendo en la línea 42.

Y ese es el archivo que intentas abrir en la línea 45. Por eso el mensaje de error dice que no puede abrir un archivo llamado 0, en la línea 45.

La solución es que gets() devuelva el valor correcto.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 0 invitados

cron