• Publicidad

Recorrer XML con atributos

Todo lo relacionado con el desarrollo Web con Perl: desde CGI hasta Mojolicious

Re: Recorrer XML con atributos

Notapor explorer » 2011-03-26 12:31 @563

Con XML::DOM no he conseguido hacerlo. En cambio, con XML::Simple, ha sido sencillo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use diagnostics;
  5.  
  6. use XML::Simple;
  7. use LWP::Simple;
  8.  
  9. my $pubID = 1;
  10.  
  11. my $pagina = get("http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=pubmed&id=$pubID");
  12.  
  13. my $xml = XMLin($pagina, ForceArray => [ 'DocSum', 'Item' ], ForceContent => 1);
  14.  
  15. for my $docsum ( @{ $xml->{DocSum} } ) {
  16.  
  17.     print "Id: ", $docsum->{'Id'}->{'content'}, " : ";
  18.  
  19.     for my $item ( @{ $docsum->{Item} } ) {
  20.  
  21.         next if $item->{'Name'} ne 'Title';
  22.  
  23.         print $item->{'content'};
  24.     }
  25.    
  26.     print "\n";
  27. }
Coloreado en 0.004 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

Publicidad

Re: Recorrer XML con atributos

Notapor dexposito » 2011-04-23 10:59 @499

Buenas tardes,

Ya me solucionaste en su día el problema que tenía al recorrer los XML con Perl.

Ahora tengo la siguiente pregunta: tengo este programa que me recorre un XML para ir actualizando una base de datos:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $pubID
  2.     = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=gene&id="
  3.     . $pubID;
  4.  
  5. #my $pubIP = 1;
  6.  
  7. my $xml = XML::Smart->new($pubID);
  8.  
  9. my $sth1;
  10. my $alias;
  11.  
  12. for my $docsum ( @{ $xml->{eSummaryResult}->{DocSum} } ) {
  13.  
  14.     print $docsum->{Id}, "\n";
  15.  
  16.     $alias = $docsum->{Item}( 'Name', 'eq', 'OtherAliases' );
  17.  
  18.     $sth1
  19.         = $dbh->prepare('UPDATE gene_info_21 SET Alias = ? WHERE GeneID = ?')
  20.         or die( "Couldn't prepare statement: " . $dbh->errstr );
  21.     $sth1->execute( $alias, $docsum->{Id} )
  22.         or die( "Couldn't execute statement: " . $sth1->errstr );
  23.  
  24. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Resulta que hay veces que me da error cuando abro el xml, o cuando lo empiezo a recorrer, supongo que porque el xml no estará bien formado. El caso es que me da un error el perl y me para de recorrer el xml. ¿Hay alguna forma de capturar ese error y que siga con la ejecución del programa?

Este trozo de código que te he pasado está dentro de un bucle y voy llamando abriendo un xml diferente en cada iteración, lo que quiero es que si me da error en un xml, siga a la siguiente iteración del bucle y no pare la ejecución, ya que aunque no me actualice los datos que contiene el xml que ha dado error, como son pocos, me da igual. En la siguiente actualización ya se hará bien.

Espero haberme explicado bien, gracias por la ayuda.
Última edición por explorer el 2011-04-23 11:29 @520, editado 2 veces en total
Razón: Formatear el código con Perltidy. Poner coloreado de sintaxis Perl
dexposito
Perlero nuevo
Perlero nuevo
 
Mensajes: 11
Registrado: 2011-03-26 06:22 @307

Re: Recorrer XML con atributos

Notapor explorer » 2011-04-23 13:22 @598

Pero... ¿qué tipo de error? ¿sale un error en pantalla? ¿en qué línea o en qué momento?

Quizás puedas resolverlo con una sentencia eval {}. O usar el módulo recomendado por la comunidad, Try::Tiny.
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: Recorrer XML con atributos

Notapor dexposito » 2011-04-30 08:29 @395

Entonces, ¿crees que, por ejemplo, para seguir con la ejecución podría poner esto?
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. try {
  2.         my $xml=XML::Smart->new($pubID);
  3.     } catch {
  4.         print FILE "Error XML";
  5.     }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


¿y así me guarda los errores en un archivo y sigo con la ejecución?

Tengo que probarlo aún que esta parte del proyecto la he dejado un poco parada, pero si más o menos es lo que tendría que hacer para no parar la ejecución del programa cuando hay un error en el xml me iría perfecto.
dexposito
Perlero nuevo
Perlero nuevo
 
Mensajes: 11
Registrado: 2011-03-26 06:22 @307

Re: Recorrer XML con atributos

Notapor explorer » 2011-04-30 08:35 @399

No puedes poner el my() dentro de un contexto de llaves {}: la variable $xml no será conocida fuera de ese contexto.

Mejor pon el my $xml; antes de esas línea, y luego haces el $xml = XML::Smart....
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: Recorrer XML con atributos

Notapor dexposito » 2011-04-30 08:47 @408

ok, probaré esto y si va bien te lo comento por aquí. Gracias.
dexposito
Perlero nuevo
Perlero nuevo
 
Mensajes: 11
Registrado: 2011-03-26 06:22 @307

Anterior

Volver a Web

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron