• 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 seguridadenmimail » 2012-09-16 10:41 @487

Estoy teniendo un problema cuando solamente tengo un dato en:
Sintáxis: [ Descargar ] [ Ocultar ]
  1. <TEST2> 


El script se "rompe" y presenta:
Sintáxis: [ Descargar ] [ Ocultar ]
  1. Not an ARRAY reference at script.pl line 10. 


Siendo la línea 10:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. for $test3 (@{$xml->{Scan}->{WEBS}->{TEST2}){
  2.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
seguridadenmimail
Perlero nuevo
Perlero nuevo
 
Mensajes: 69
Registrado: 2011-08-30 19:28 @853

Publicidad

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

Notapor explorer » 2012-09-16 11:04 @503

Si sale el mensaje de error es porque, en efecto, dentro de TEST2 solo hay un elemento, y por lo tanto XML::Simple no ha creado una referencia a un array, si no que contiene una referencia una clave que apunta al siguiente hash más profundo.

Mira la estructura que volcó Dumper en mi anterior ejemplo, y lo verás.

Aquí hay que decir dos cosas.

La primera: que en mi último ejemplo eso está resuelto porque accedo al único elemento que hay dentro de TEST2, que es un TEST3 (línea 42).

Y la segunda: XML::Simple tiene la desagradable característica de crear diferentes estructuras de datos según exista un solo elemento o una lista de elementos, dentro de un elemento determinado (por eso se llama Simple).

Eso quiere decir que si dentro de TEST2, en algunas ocasiones hay un solo elemento, lo devolverá en forma de referencia a un hash, pero si en otra ocasión hay más de un elemento, entonces creará una referencia a un array.

Debes, antes de nada, decidir o saber cuál es la estructura XML que quieres manejar. Saber qué elementos pueden aparecen una sola vez, o varias.

Según eso, en la llamada XML::Simple->new() pondremos una o más opciones que indiquen cómo deben ser tratados esos elementos. En casi todos los casos, nos interesará obtener un array de ese elemento, aunque a veces solo contenga un elemento. Pero eso nos simplifica el código.

Pues eso: nos tienes que decir el esquema correcto del XML que quieres procesar.
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-16 11:10 @507

Voy a probar con lo de la línea 42, el problema es que depende del XML que analice tiene uno o más elementos.

Cuando decís:
XML::Simple->new()


¿Me estás indicando que con "ForceArray => 1" tendría que funcionar? Porque acabo de probar y me entrega el mismo 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-16 11:50 @535

Si uso ForceArray => 1 en el último código que puse, me sale esta estructura:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
$VAR1 = {
          'Scan' => [
                      {
                        'INITURL' => [
                                       '10.10.10.15'
                                     ],
                        'WEBS' => [
                                    {
                                      'StartUrl' => 'http://10.10.10.15/',
                                      'TEST2' => [
                                                   {
                                                     'TEST3' => {
                                                                  '1' => {
                                                                           'TODASLASURL' => [
                                                                                              'http://10.10.10.15/'
                                                                                            ],
                                                                           'Name' => [
                                                                                       {}
                                                                                     ]
                                                                         },
                                                                  '2' => {
                                                                           'INFO' => [
                                                                                       {
                                                                                         'INFORMA' => [
                                                                                                        {
                                                                                                          'TEXTO' => [
                                                                                                                       'hola'
                                                                                                                     ]
                                                                                                        },
                                                                                                        {
                                                                                                          'TEXTO' => [
                                                                                                                       'hola2'
                                                                                                                     ]
                                                                                                        },
                                                                                                        {
                                                                                                          'TEXTO' => [
                                                                                                                       'hola3'
                                                                                                                     ]
                                                                                                        }
                                                                                                      ]
                                                                                       }
                                                                                     ],
                                                                           'TODASLASURL' => [
                                                                                              'http://10.10.10.15/index.html'
                                                                                            ],
                                                                           'Name' => [
                                                                                       'index.html'
                                                                                     ]
                                                                         }
                                                                }
                                                   }
                                                 ]
                                    }
                                  ],
                        'Name' => [
                                    'b ( 10.10.10.15 )'
                                  ]
                      }
                    ]
        };
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
que, como ves, es distinta de la que salía antes. Hay muchas más referencias a arrays. arrays que a su vez contienen, como elementos, o una referencia a un hash o el elemento final.

Ahora la escritura de código debería hacerse a algo parecido a esto:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. for $test3 (@{$xml->{Scan}->[0]->{WEBS}->[0]->{TEST2}) {
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 situ » 2012-12-17 10:03 @461

Buenas,
Hay alguna forma de analizar porque me esta dando este resultado?

End tag mismatch (Informacion != Datos) [Ln: 86, Col: 110]


Teniendo dentro del XML:
Sintáxis: [ Descargar ] [ Ocultar ]
Using xml Syntax Highlighting
  1.         <Referencia>
  2.           <Informacion><![CDATA[test]]></Informacion>
  3.           <Datos><![CDATA[test2]]></Datos>
  4.         </Referencia>
  5.  
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Me pasa lo mismo con otros XML y todos en diferentes tags.
Saludos.
Última edición por situ el 2012-12-17 10:24 @475, editado 1 vez en total
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

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

Notapor explorer » 2012-12-17 10:07 @463

Je, je... "Datos" no es lo mismo que "URL" :)
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 situ » 2012-12-17 10:25 @475

Perdón, ahí quedo, me olvidé de modificar esa parte cuando lo copié.

¿Hay alguna forma de ver por qué me está dando ese error?
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

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

Notapor explorer » 2012-12-17 12:49 @576

El mensaje de error te dice el lugar donde el analizador cree que está el error. Ln es la abreviatura de línea, y Col, de columna.
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 situ » 2012-12-17 13:03 @585

Te hago una consulta. Por ejemplo obtengo:

Y la línea es:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
  1. End tag mismatch (Informacion != Datos) [Ln: 869, Col: 110]
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
  1. <Informacion><![CDATA[Security Focus - Penetration Testing for Web Applications (Part Two)]]></Informacion>
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


¿Cuál sería 110?

Por lo que veo es tema de la versión del XML::Simple.
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

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

Notapor explorer » 2012-12-17 17:13 @759

Yo no veo nada raro... Sí que es posible que sea un fallo del XML::Simple. Quizás debas usar algún otro (hay unos doscientos en CPAN). Por ejemplo, XML::Smart, XML::Twig o uno que me han hablado bien: XML::Trivial.

No te fíes mucho del número de la línea. Puede ser alguna de las anteriores a la que te está indicando.
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

Anterior

Volver a Básico

¿Quién está conectado?

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

cron