• Publicidad

Cómo leer un SOAP

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

Re: Cómo leer un SOAP

Notapor coltx » 2011-09-25 19:21 @848

Gracias explorer, he comenzado a sacar los datos de la forma que me has dicho... my($id_plan) = $respuesta_decodificada =~ m{<id_plan>(.*?)</id_plan>}; pero pasa que hay varios id_plan y me muestra solo el primero. ¿Me puedes ayudar en cómo puedo hacer un bucle para extraer el resto de los id_plan...? ¿Si te fijas hay varios valores dentro de los <tabla>....</tabla>

el xml es así..
Sintáxis: [ Descargar ] [ Ocultar ]
Using xml Syntax Highlighting
  1. <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><enlaceprueba xmlns="http://www.prueba.com/"><enlacepruebaresult><NewDataSet xmlns=""><tabla><id_plan>4</id_plan><comercio>comerciosss1</comercio></tabla><tabla><id_plan>6</id_plan><comercio>comerciosss2</comercio></tabla><tabla><id_plan>7</id_plan><comercio>comerciosss3</comercio></tabla>...
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Desde ya muchas gracias...
coltx
Perlero nuevo
Perlero nuevo
 
Mensajes: 79
Registrado: 2011-09-16 08:01 @376

Publicidad

Re: Cómo leer un SOAP

Notapor explorer » 2011-09-26 06:50 @326

coltx escribiste:pero pasa que hay varios id_plan y me muestra solo el primero
Claro... y eso no lo habías dicho, y por eso la solución dada era ajustada a lo que pedías.

Sería algo así:
my @id_plan = $respuesta_decodificada =~ m{<id_plan>(.*?)</id_plan>}gsm;

Y los valores quedan guardados en el array.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Cómo leer un SOAP

Notapor explorer » 2011-09-30 07:27 @352

En este artículo: Five Tips for .NET Programming in Perl se comentan (en inglés) los problemas que hay cuando se quiere realizar un servicio web contra un servidor web, usando SOAP::Lite.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Cómo leer un SOAP

Notapor coltx » 2011-12-21 19:38 @860

Estimado explorer, gracias por tu ayuda. He logrado consumir desde el WS, pero pasa que algunos datos vienen vacíos y en el array no queda almacenado este "vacío". Al ejecutar esta consulta :

my @id_plan = $respuesta_decodificada =~ m{<id_plan>(.*?)</id_plan>}gsm;

Por ejemplo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
<id_plan>1</id_plan>
<id_plan>3</id_plan>
<id_plan></id_plan>
<id_plan>5</id_plan>
<id_plan>6</id_plan>
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


entonces el arreglo queda así @id_plan[1,3,5,6] , pero el "vacío" no lo almacena... Favor, tu ayuda. Gracias.
coltx
Perlero nuevo
Perlero nuevo
 
Mensajes: 79
Registrado: 2011-09-16 08:01 @376

Re: Cómo leer un SOAP

Notapor explorer » 2011-12-21 21:21 @931

Sí que almacena el vacío. Lo que pasa es que no lo ves.

Mira esto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. my $respuesta_decodificada = '<id_plan>1</id_plan>
  3. <id_plan>3</id_plan>
  4. <id_plan></id_plan>
  5. <id_plan>5</id_plan>
  6. <id_plan>6</id_plan>';
  7.  
  8. my @id_plan = $respuesta_decodificada =~ m{<id_plan>(.*?)</id_plan>}gsm;
  9.  
  10. print join('|', @id_plan), "\n";
  11.  
  12. __END__
  13. 1|3||5|6
  14.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Observa: hay un undef en la tercera posición.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Cómo leer un SOAP

Notapor coltx » 2011-12-22 08:43 @405

Te entiendo explorer, pero pasa que al recorrer el arreglo con un for(), por ejemplo, no veo el vacío... y necesito ver ese vacío para guardarlo en una BD, por ejemplo:


#!/usr/bin/perl
my $respuesta_decodificada = '<id_plan>1</id_plan>
<id_plan>3</id_plan>
<id_plan></id_plan>
<id_plan>5</id_plan>
<id_plan>6</id_plan>';

my @id_plan = $respuesta_decodificada =~ m{<id_plan>(.*?)</id_plan>}gsm;


for($i=0 ; $i<6 ; $i++)
{
print @id_plan[$i]

}

_END_
1356
coltx
Perlero nuevo
Perlero nuevo
 
Mensajes: 79
Registrado: 2011-09-16 08:01 @376

Re: Cómo leer un SOAP

Notapor explorer » 2011-12-22 11:50 @534

El "vacío", por definición, no se puede "ver", principalmente, porque está vacío.

O, dicho de otra manera: Si tuvieras un valor vacío, ¿qué valor quieres guardar en la base de datos?

¿'' o 0 o 'NULL'?

Si cambias el print que tienes en tu código, por

print "[$id_plan[$i]]";

entonces lo verás. Mejor dicho, no lo verás. Solo verás que sí existe el valor, pero vacío.

En Perl, los valores vacíos se convierten en cadenas de texto vacías, cuando se tratan en contexto de cadena, y en el valor 0 cuando se tratan en contexto numérico.

P.D. Usar @id_plan[$i] es un error. El '@' inicial indica que quieres obtener una lista de valores del array @id_plan, pero en realidad solo estás recuperando uno solo. Para eso, tienes que usar '$', como te he puesto en mi código.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Cómo leer un SOAP

Notapor coltx » 2012-01-02 09:30 @438

Gracias, estimado explorer, revisaré el tema.
coltx
Perlero nuevo
Perlero nuevo
 
Mensajes: 79
Registrado: 2011-09-16 08:01 @376

Anterior

Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 17 invitados