• Publicidad

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.

XML::Simple

Notapor situ » 2012-10-30 15:14 @676

Estoy tratando de parsear un XML que es generado mediante la utilización del método HTTP POST.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use LWP::UserAgent;
  3. use HTTP::Request;
  4. use XML::Simple;
  5. $xml = new XML::Simple;
  6.  
  7. for ( $i = 1; $i < 10; $i++ ) {
  8.     print "Probando $i\n";
  9.     $url   = "http://localhost";
  10.     $query = "$variable=1$i";
  11.     $ua    = LWP::UserAgent->new;
  12.     $ua->agent("Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)");
  13.     $req = HTTP::Request->new( POST => $url );
  14.     $req->content_type('application/x-www-form-urlencoded');
  15.     $ua->timeout(30);
  16.     $req->content($query);
  17.     $response = $ua->request($req);
  18.     $content  = $response->content();
  19.     $data     = $xml->XMLin($content);
  20.  
  21. }
  22.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Al ejecutar el obtengo:
could not find ParserDetails.ini in C:/Perl/site/lib/XML/SAX


Digamos no me está andando, mi idea es analizar $content, ya que es el contenido XML de la página.
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Publicidad

Re: XML::Simple

Notapor explorer » 2012-10-30 15:49 @700

Parece que no está bien instalado el módulo XML::SAX.

Está buscando por el archivo ParserDetails.ini para saber qué características tiene cada analizador de XML.

En mi sistema, contiene algo como esto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
[XML::SAX::PurePerl]
http://xml.org/sax/features/namespaces = 1


[XML::LibXML::SAX]
http://xml.org/sax/features/namespaces = 1


[XML::LibXML::SAX::Parser]
http://xml.org/sax/features/namespaces = 1


[XML::SAX::Expat]
http://xml.org/sax/features/namespaces = 1
http://xml.org/sax/features/external-general-entities = 1
http://xml.org/sax/features/external-parameter-entities = 1
Coloreado en 0.000 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

Notapor situ » 2012-10-30 16:01 @709

¿Cómo obtengo ese listado?

Capaz estoy poniendo mal las sentencias, porque siempre manejé el analizador sobre archivos y ahora lo hago sobre una variable.
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Re: XML::Simple

Notapor explorer » 2012-10-30 16:32 @730

En el manual de XML::Simple pone claramente que XMLin() admite varios tipos de argumentos, y uno de ellos puede ser una cadena de caracteres, así que sí que lo estás haciendo bien.

El problema está en ese archivo, ParserDetails.ini, que no lo encuentra.

Yo crearía ese archivo, con el contenido que te he dado, dentro del directorio C:/Perl/site/lib/XML/SAX/
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

Notapor situ » 2012-10-30 17:54 @787

Tuve que borrar algunas líneas ya que no tenía esos .pm y me daba error en la carga.

El archivo me quedó con el siguiente contenido:
Sintáxis: [ Descargar ] [ Ocultar ]
  1. [XML::SAX::PurePerl] 
  2. http://xml.org/sax/features/namespaces = 1 


Pero ahora obtengo el siguiente resultado cuando hago un:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $data = $xml->XMLin($content) ;
  2. print $data;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


HASH(0x2e0d714)



Lo raro que usando el Dumper me funciona bien, digamos haciendo el print:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use Data::Dumper;
  2. $data = $xml->XMLin($content) ;
  3. print Dumper($data);
  4.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Re: XML::Simple

Notapor explorer » 2012-10-30 19:44 @863

El resultado es correcto: XMLin() devuelve una referencia a un hash que contiene la estructura del XML leído.

Ahora solo tienes que acceder dentro de esa referencia a los datos que te interesen.
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

Notapor situ » 2012-10-30 19:58 @873

Muchas Gracias =)
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114


Volver a Básico

¿Quién está conectado?

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

cron