• Publicidad

Lectura de xml con módulo XML::Simple

Aquí encontrarás todo lo que sea específicamente acerca de módulos de Perl. Ya sea que estás compartiendo tu módulo, un manual o simplemente tienes una duda acerca de alguno.

Lectura de xml con módulo XML::Simple

Notapor johnk » 2010-06-16 06:06 @295

Hola a todos.
Uso en mi software el módulo XML::Simple para hacer la lectura de un archivo xml.
Leo un xml parecido a este:

Sintáxis: [ Descargar ] [ Ocultar ]
Using xml Syntax Highlighting
<clientela>
  <cliente>
    <nombre>Filemon Pi</nombre> </cliente>
  <cliente>
    <nombre>Pantuflo Zapatilla</nombre></cliente>
  ...........
</clientela>
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Con este código:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
# ...
my $xml=XMLin("$Conn::clientes.xml",ForceArray => [ 'clientela']);
    foreach my $cliente (@{$xml->{cliente}}{
......
# También probé:
my $clientes = XMLin("/root/txt/tutoperl2000/clientes.xml");
for( @{$clientes->{cliente}} ) {
  print "$_->{nombre} => $_->{pasta} ($_->{fecha})\n";
}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


El problema viene cuando este xml solo tiene un cliente, y es cuando este código da un error por no tomarlo como un array o algo parecido. Entonces tengo que diferenciar siempre en el código cuando el xml contiene un solo cliente o tiene varios para hacer la lectura de una forma u otra, y me preguntaba si había alguna forma de hacerlo sin tener que diferenciarlos.

Muchas gracias
johnk
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2010-06-09 05:01 @250

Publicidad

Re: Lectura de xml con módulo XML::Simple

Notapor explorer » 2010-06-16 06:56 @331

Cambia

ForceArray => [ 'clientela' ]

por

ForceArray => [ 'cliente' ]

De esa manera, estamos indicando qué etiqueta queremos que sea un array.
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.  
  8. my $xml = XMLin('kk.xml', ForceArray => [ 'cliente' ]);
  9.  
  10. use Data::Dumper;
  11. print Dumper $xml;
  12.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
$VAR1 = {
          'cliente' => [
                       {
                         'nombre' => 'Filemon Pi'
                       },
                       {
                         'nombre' => 'Pantuflo Zapatilla'
                       }
                     ]
        };
 
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: Lectura de xml con módulo XML::Simple

Notapor salva » 2010-06-16 11:51 @535

explorer escribiste:ForceArray => [ 'cliente' ]

Yo incluso iría más lejos y haría ForceArray => 1 que además es lo que recomienda la documentación del módulo.

En la práctica, y especialmente cuando el XML proviene de un tercero, nunca sabes lo que te puede llegar y donde esperabas un elemento pueden venir varios y lo mismo a la inversa. Así que es una mala idea asumir cosas en tu script y que éste falle diciendo que "foo" no es una referencia o incluso peor, que en un campo, en vez de lo que tenía que poner, te aparezca "ARRAY(0x123456)".
Avatar de Usuario
salva
Perlero nuevo
Perlero nuevo
 
Mensajes: 200
Registrado: 2008-01-03 15:19 @680


Volver a Módulos

¿Quién está conectado?

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

cron