• Publicidad

Consulta de XML::Simple

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

Re: Consulta de XML::Simple

Notapor seguridadenmimail » 2011-12-14 07:51 @368

Perfecto. Perdón, pero ¿cómo tendría que hacer para listar todos los "APs" y hacer los print() de cada valor por separado?
seguridadenmimail
Perlero nuevo
Perlero nuevo
 
Mensajes: 69
Registrado: 2011-08-30 19:28 @853

Publicidad

Re: Consulta de XML::Simple

Notapor explorer » 2011-12-14 08:23 @391

Aquí hay dos soluciones, a falta de una:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4.  
  5. use XML::Simple;
  6.  
  7. # Leemos el xml
  8. # KeyAttr => 1 : para evitar que convierta la entrada <name> en clave principal
  9. # ForceArray => ['wpt'] : indicamos que esa marca debe ser *siempre* un array
  10. #my $info = XMLin("code_28980.txt", KeyAttr => 1, ForceArray => ['wpt']);
  11. my $info = XMLin("code_28964.xml", KeyAttr => 1, ForceArray => ['wpt']);
  12.  
  13. #use Data::Dumper;
  14. #print Dumper $info;
  15.  
  16. # Una forma
  17. # Cuántos wpt tenemos
  18. my $n_wpt = scalar @{ $info->{wpt} } - 1;
  19.  
  20. for my $i (0 .. $n_wpt) {
  21.  
  22.     my $extensions_ref = $info->{wpt}->[$i]->{extensions};
  23.  
  24.     for my $ap ( keys %{$extensions_ref} ) {
  25.         print "$ap => $extensions_ref->{$ap}\n";
  26.     }
  27.  
  28.     print '=' x 50, "\n";
  29. }
  30.  
  31. print '-' x 70, "\n";
  32.  
  33. # Otra forma
  34. # Accediendo a los valores wpt directamente
  35. for my $wpt_ref ( @{ $info->{wpt} } ) {
  36.     my $extensions_ref = $wpt_ref->{extensions};
  37.  
  38.     for my $ap ( keys %{$extensions_ref} ) {
  39.         print "$ap => $extensions_ref->{$ap}\n";
  40.     }
  41.  
  42.     print '=' x 50, "\n";
  43. }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
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

Re: Consulta de XML::Simple

Notapor seguridadenmimail » 2011-12-14 08:49 @409

¡Muchas Gracias! ¡Funciona perfecto!

Dejo el script completo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4.  
  5. BEGIN {
  6.  
  7.     eval "use XML::Simple";
  8.  
  9.     if ( $@ ) {
  10.  
  11.         warn  "Error al cargar el modulo: XML::Simple\n"
  12.  
  13.         . "instalar modulo:\n"      
  14.  
  15.         . "\t\tcpan\n"
  16.  
  17.         . "\t\tcpan> install XML::Simple\n";
  18.  
  19. exit ();
  20.  
  21.  }
  22.  
  23.  }
  24.  
  25. use XML::Simple;
  26.  
  27. if ( @ARGV != 1 ) {
  28.     die "\nUso: $0 <reporte.gpx>\n";
  29.  
  30. }
  31.  
  32. my $file = $ARGV[0];
  33. chomp $file;
  34.  
  35. # Leemos el xml
  36. # KeyAttr => 1 : para evitar que convierta la entrada <name> en clave principal
  37. # ForceArray => ['wpt'] : indicamos que esa marca debe ser *siempre* un array
  38. my $info = XMLin("$file", KeyAttr => 1, ForceArray => ['wpt']);
  39.  
  40. # Una forma
  41. # Cuántos wpt tenemos
  42. my $n_wpt = scalar @{ $info->{wpt} } - 1;
  43.  
  44. for my $i (0 .. $n_wpt) {
  45.  
  46.     my $extensions_ref = $info->{wpt}->[$i]->{extensions};
  47.  
  48.     for my $ap ( keys %{$extensions_ref} ) {
  49.         print "$ap => $extensions_ref->{$ap}\n";
  50.     }
  51.  
  52.     print '=' x 50, "\n";
  53. }
  54.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Ahora voy a intentar llevar la información obtenida a un XLS.
seguridadenmimail
Perlero nuevo
Perlero nuevo
 
Mensajes: 69
Registrado: 2011-08-30 19:28 @853

Re: Consulta de XML::Simple

Notapor seguridadenmimail » 2011-12-14 09:12 @425

explorer, ¿es muy complicado separar los print()? Así, con esto, puedo enviar cada dato a una columna del XLS. Así como está, obtengo todos los datos juntos.
seguridadenmimail
Perlero nuevo
Perlero nuevo
 
Mensajes: 69
Registrado: 2011-08-30 19:28 @853

Re: Consulta de XML::Simple

Notapor explorer » 2011-12-14 09:23 @433

Pues... no...
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.     print "networkType   => $extensions_ref->{networkType}\n";
  2.     print "rates         => $extensions_ref->{rates}\n";
  3.     print "SSID          => $extensions_ref->{SSID}\n";
  4.     print "MAC           => $extensions_ref->{MAC}\n";
  5.     print "signalQuality => $extensions_ref->{signalQuality}\n";
  6.     print "RSSI          => $extensions_ref->{RSSI}\n";
  7.     print "ChannelID     => $extensions_ref->{ChannelID}\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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

Re: Consulta de XML::Simple

Notapor seguridadenmimail » 2011-12-14 10:20 @472

¡Perfecto!
Muchas Gracias.
Siempre se aprende aquí.
seguridadenmimail
Perlero nuevo
Perlero nuevo
 
Mensajes: 69
Registrado: 2011-08-30 19:28 @853

Re: Consulta de XML::Simple

Notapor seguridadenmimail » 2011-12-14 13:24 @600

Agregué otro print():
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. print "Privacy       => $extensions_ref->{privacy}\n";
  2.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


El problema es que este dato, muchas veces tiene 2 valores separados con "-". Por ejemplo:
RSNA-CCMP


Mi idea es ver cuando este parámetro ("privacy") tenga un valor como el nombrado, me lo separe en dos, y así puedo imprimir los valores por separado.

Traté de usar split() pero no logro lo que necesito.
seguridadenmimail
Perlero nuevo
Perlero nuevo
 
Mensajes: 69
Registrado: 2011-08-30 19:28 @853

Re: Consulta de XML::Simple

Notapor explorer » 2011-12-14 19:08 @839

Sin ver el código, es difícil decirte dónde puede estar el problema...

Sería algo así (no probado):

my @valores = split /-/, $extensions_ref->{privacy};
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

Anterior

Volver a Básico

¿Quién está conectado?

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

cron