• Publicidad

Extracción de datos con 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.

Extracción de datos con XML::Simple

Notapor joshuasilva » 2011-01-04 07:55 @371

Buenas tardes,

Estoy tratando un fichero XML de ejemplo, que sería el siguiente:
Sintáxis: [ Descargar ] [ Ocultar ]
Using xml Syntax Highlighting
  1. <?xml version="1.0"?>
  2. <menu>
  3.   <clientes>
  4.     <cliente>
  5.       <nombre>operador1</nombre>
  6.       <fecha>11:50 30/1/2000</fecha>
  7.       <apodo>apodo1</apodo>
  8.     </cliente>
  9.     <cliente>
  10.       <nombre>operador2</nombre>  
  11.       <fecha>10:30 22/2/2000</fecha>
  12.       <apodo>apodo2</apodo>
  13.     </cliente>
  14.   </clientes>
  15.   <empresas>
  16.     <empresa>
  17.         <nombre>empresa1</nombre>
  18.     </empresa>
  19.     <empresa>
  20.         <nombre>empresa2</nombre>
  21.     </empresa>
  22. </menu>
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Lo que quiero hacer es coger el campo "nombre" del primer cliente (operador1) y compararlo con un texto, de forma que si coincide me saque un mensaje.
He probado el siguiente código, pero la verdad ando perdido sobre cómo debo hacerlo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  my $ficheroxml = XMLin("pruebas_perl/clientes.xml");
  print "Inicio búsqueda\n";
  for( @{$ficheroxml->{clientes}->{cliente}} ) {
    if ($ficheroxml->{clientes}->{cliente}[0] == "operador1") {
        print "Encontrado!\n";
    }
  }
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


¡Gracias de antemano!
joshuasilva
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2010-12-01 07:13 @342

Publicidad

Re: Extracción de datos con XML::Simple

Notapor explorer » 2011-01-04 08:52 @411

El xml está mal: falta cerrar la marca <empresas>.

Además, veo que tienes un if() con una comparación de cadenas de caracteres, pero estás usando el comparador numérico ==, cuando deberías de usar el comparador alfanumérico eq.

Una vez resuelto ese tema, lo mejor para tratar con XML::Simple es usar a nuestro amigo Data::Dumper:
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 $ficheroxml = XMLin("code_23978.xml");
  9.  
  10. use Data::Dumper;
  11. print Dumper \$ficheroxml;
  12.  
  13. print "Inicio búsqueda\n";
  14.  
  15. for my $cliente ( @{$ficheroxml->{clientes}->{cliente}} ) {
  16.     if ($cliente->{nombre} eq "operador1") {  
  17.         print "¡Encontrado operador1!\n";
  18.     }
  19. }
  20.  
  21. __END__
  22. $VAR1 = \{
  23.             'empresas' => {
  24.                             'empresa' => [
  25.                                            {
  26.                                              'nombre' => 'empresa1'
  27.                                            },
  28.                                            {
  29.                                              'nombre' => 'empresa2'
  30.                                            }
  31.                                          ]
  32.                           },
  33.             'clientes' => {
  34.                             'cliente' => [
  35.                                            {
  36.                                              'apodo' => 'apodo1',
  37.                                              'fecha' => '11:50 30/1/2000',
  38.                                              'nombre' => 'operador1'
  39.                                            },
  40.                                            {
  41.                                              'apodo' => 'apodo2',
  42.                                              'fecha' => '10:30 22/2/2000',
  43.                                              'nombre' => 'operador2'
  44.                                            }
  45.                                          ]
  46.                           }
  47.           };
  48. Inicio búsqueda
  49. ¡Encontrado operador1!
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Viendo la estructura que XML::Simple ha leído, podemos figurarnos qué es lo que tenemos que escribir para acceder a los datos.
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: Extracción de datos con XML::Simple

Notapor joshuasilva » 2011-01-07 03:21 @181

Ostras, ¡muchas gracias, ahora ya funciona!

PD: Espero que los reyes se hayan portado bien ;)
joshuasilva
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2010-12-01 07:13 @342


Volver a Básico

¿Quién está conectado?

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