• Publicidad

XML::Simple / Excel::Writer::XLSX

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

Re: XML::Simple / Excel::Writer::XLSX

Notapor explorer » 2012-09-12 17:11 @758

Define "sin información".

Yo sacaría por pantalla o en las mismas celdas, el contenido de $DInformation:

print "[$DInformation]\n";

Los corchetes son importantes, pues te permitirán ver caracteres "fantasma".
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

Publicidad

Re: XML::Simple / Excel::Writer::XLSX

Notapor seguridadenmimail » 2012-09-12 17:16 @761

Esta es la salida de la prueba:

Sintáxis: [ Descargar ] [ Ocultar ]
  1. [HASH(0x2e59c0c)] 
  2. [HASH(0x2e5aa04)] 
  3. [HASH(0x2f68b0c)] 
  4. [HASH(0x2f6955c)] 
  5. [HASH(0x2f69fd4)] 
  6. [HASH(0x2f6aa4c)] 
  7. [MARCOS] 
  8. [testing] 
  9. [HASH(0x2e5ac84)] 
  10. [HASH(0x2f6904c)] 


Lo "arreglé" con regex
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. if ($DInformation =~ m/^HASH/)
  2.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
seguridadenmimail
Perlero nuevo
Perlero nuevo
 
Mensajes: 69
Registrado: 2011-08-30 19:28 @853

Re: XML::Simple / Excel::Writer::XLSX

Notapor explorer » 2012-09-12 17:40 @778

Bien, ha quedado demostrado que "hay algo".

En concreto, es una referencia a un hash. Si quieres saber qué es, puedes sacarlo con

my %hash = %{ $DInformation };

En los if(), casi mejor que hagas esto (es más rápido):

if (ref($DInformation) eq "HASH") {
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: XML::Simple / Excel::Writer::XLSX

Notapor seguridadenmimail » 2012-09-12 17:46 @782

Perfecto. Ahora quiero imprimir

Sintáxis: [ Descargar ] [ Ocultar ]
  1. $xml->{Scan}->{WEBS}->{TEST2}->{TEST3}->{INFO}->{INFORMA}->{TEXTO} 


pero no me está dando información.

¿Está mal pensando de esa forma la llamada al campo?
seguridadenmimail
Perlero nuevo
Perlero nuevo
 
Mensajes: 69
Registrado: 2011-08-30 19:28 @853

Re: XML::Simple / Excel::Writer::XLSX

Notapor explorer » 2012-09-12 18:40 @819

Ni idea de cómo es la estructura que estás manejando...

Usa Data::Dumper, para verla:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use Data::Dumper;
print Dumper $xml;
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: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: XML::Simple / Excel::Writer::XLSX

Notapor seguridadenmimail » 2012-09-12 19:30 @854

Supuestamente está bien como lo definí, el xml está en mi primer mensaje.
Pero obtengo:
Sintáxis: [ Descargar ] [ Ocultar ]
  1. Not an ARRAY reference at script.pl line 14. 
seguridadenmimail
Perlero nuevo
Perlero nuevo
 
Mensajes: 69
Registrado: 2011-08-30 19:28 @853

Re: XML::Simple / Excel::Writer::XLSX

Notapor explorer » 2012-09-13 06:12 @300

Creo que te falta un {TODASLASURL}.

Recuerda: para estar seguros de una estructura, usa Data::Dumper.
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: XML::Simple / Excel::Writer::XLSX

Notapor seguridadenmimail » 2012-09-13 09:56 @456

Ahí completé el XML. Como verás <TEXTO> está 3 veces. Creo que ahí está el problema de la llamada, ya que como lo ingresé está bien, a mi parecer, pero como aparece 3 veces me muestra ese error.
seguridadenmimail
Perlero nuevo
Perlero nuevo
 
Mensajes: 69
Registrado: 2011-08-30 19:28 @853

Re: XML::Simple / Excel::Writer::XLSX

Notapor explorer » 2012-09-13 15:07 @671

Precisamente las marcas TEXTO están mal... a las marcas de final les falta el carácter '/'.

Y otro detalle: lo que contienen las marcas TEXT3 no es del todo consistente, pues contienen marcas distintas. En solo uno de ellos está la marca INFO, así que hay que tener en cuenta un caso.

He reeditado tu mensaje y he corregido el sangrado de las marcas y los caracteres que faltaban.

El siguiente ejemplo te servirá para ver cómo acceder al interior de la estructura.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/env perl
  2. use v5.14;
  3. use XML::Simple;
  4. my $xml_simple = new XML::Simple( KeyAttr => [] );
  5.  
  6. my $xml = $xml_simple->XMLin(
  7. '<?xml version="1.0"?>
  8. <ScanFULL>
  9.    <Scan>
  10.        <Name><![CDATA[b ( 10.10.10.15 )]]></Name>
  11.        <INITURL><![CDATA[10.10.10.15]]></INITURL>
  12.        <WEBS StartUrl="http://10.10.10.15/">
  13.        <TEST2>
  14.            <TEST3 id="1">
  15.                <Name></Name>
  16.                <TODASLASURL>http://10.10.10.15/</TODASLASURL>
  17.            </TEST3>
  18.            <TEST3 id="2">
  19.                <Name>index.html</Name>
  20.                <TODASLASURL>http://10.10.10.15/index.html</TODASLASURL>
  21.                <INFO>
  22.                    <INFORMA>
  23.                        <TEXTO>hola</TEXTO>
  24.                    </INFORMA>
  25.                    <INFORMA>
  26.                        <TEXTO>hola2</TEXTO>
  27.                    </INFORMA>
  28.                    <INFORMA>
  29.                        <TEXTO>hola3</TEXTO>
  30.                    </INFORMA>
  31.                </INFO>
  32.            </TEST3>
  33.        </TEST2>
  34.        </WEBS>
  35.    </Scan>
  36. </ScanFULL>
  37. ');
  38.  
  39. use Data::Dumper;
  40. print Dumper $xml;                                              # Volcado de la estructura creada
  41.  
  42. my $test3_ref = $xml->{Scan}->{WEBS}->{TEST2}->{TEST3};         # Acceso directo al array de TEST3
  43.  
  44. for my $test3 (@$test3_ref) {                                   # Recorremos todos los elementos de TEST3
  45.  
  46.     if (exists $test3->{INFO}) {                                # Si en ese elemento existe un INFO
  47.  
  48.         my $textos_ref = $test3->{INFO}->{INFORMA};             # accedemos al array de INFORMA
  49.        
  50.         for my $textos (@$textos_ref) {                         # Recorremos todos los elementos INFORMA
  51.             say $textos->{TEXTO};                               # y sacamos los TEXTOs
  52.         }
  53.     }
  54. }
  55.  
  56. __END__
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Esto es lo que sale:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
$VAR1 = {
          'Scan' => {
                      'INITURL' => '10.10.10.15',
                      'WEBS' => {
                                  'StartUrl' => 'http://10.10.10.15/',
                                  'TEST2' => {
                                               'TEST3' => [
                                                            {
                                                              'TODASLASURL' => 'http://10.10.10.15/',
                                                              'id' => '1',
                                                              'Name' => {}
                                                            },
                                                            {
                                                              'INFO' => {
                                                                          'INFORMA' => [
                                                                                         {
                                                                                           'TEXTO' => 'hola'
                                                                                         },
                                                                                         {
                                                                                           'TEXTO' => 'hola2'
                                                                                         },
                                                                                         {
                                                                                           'TEXTO' => 'hola3'
                                                                                         }
                                                                                       ]
                                                                        },
                                                              'TODASLASURL' => 'http://10.10.10.15/index.html',
                                                              'id' => '2',
                                                              'Name' => 'index.html'
                                                            }
                                                          ]
                                             }
                                },
                      'Name' => 'b ( 10.10.10.15 )'
                    }
        };
hola
hola2
hola3
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Como ves, el Data::Dumper es muy útil para mostrar la estructura que estamos manejando.

El programa accede a la estructura, según cómo sean los elementos que se va encontrando. En algunas ocasiones es un acceso directo, pero en otras, tiene que ver si existe o no INFO, y en otras, acceder como un array, por ser un conjunto de elementos.

Al final, salen los contendidos de los <TEXTOS>.
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: XML::Simple / Excel::Writer::XLSX

Notapor seguridadenmimail » 2012-09-13 15:33 @689

Muchas gracias.
seguridadenmimail
Perlero nuevo
Perlero nuevo
 
Mensajes: 69
Registrado: 2011-08-30 19:28 @853

AnteriorSiguiente

Volver a Básico

¿Quién está conectado?

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

cron