• Publicidad

Cómo manejar un error 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.

Cómo manejar un error con XML::Simple

Notapor teco000 » 2009-09-16 17:16 @761

Saludos, con una consulta: tengo un programa que recibe un XML, mi pregunta es ¿cómo puedo manejar un error en XML::Simple? Para que valide solo una trama. Ejemplo.

El xml correcto es:
Sintáxis: [ Descargar ] [ Ocultar ]
Using xml Syntax Highlighting
  1. <recarga>
  2. <plastico>4234567890123456</plastico>
  3. <fechaven>200906</fechaven>
  4. <documento>123456789</documento>
  5. <moneda>320</moneda>
  6. <valor>56.78</valor>
  7. </recarga>
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

El xml incorrecto es que venga más de una solicitud. Ejemplo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using xml Syntax Highlighting
  1. <recarga>
  2. <plastico>4234588890123333</plastico>
  3. <fechaven>200906</fechaven>
  4. <documento>123456789</documento>
  5. <moneda>320</moneda>
  6. <valor>56.78</valor>
  7. </recarga>
  8. <recarga>
  9. <plastico>4234567812345678</plastico>
  10. <fechaven>200906</fechaven>
  11. <documento>123456789</documento>
  12. <moneda>320</moneda>
  13. <valor>156.78</valor>
  14. </recarga>
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


El código que actualmente tengo no sé dónde decirle que haga la validación de que solo sea una solicitud y termine el programa. No sé si me pueden ayudar.

Mi código es el siguiente:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $xmls = new XML::Simple;
  2. $data = $xmls->XMLin($data, KeyAttr => 1 );
  3. $moneda=$data->{moneda};
  4. $plastico=$data->{plastico};
  5. $documento=$data->{documento};
  6. $fechaven=$data->{fechaven};
  7. $valor=$data->{valor};
  8. $data="$moneda|$plastico|$documento|$fechaven|$valor";
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Última edición por explorer el 2009-09-17 04:20 @222, editado 2 veces en total
Razón: Tildes
teco000
Perlero nuevo
Perlero nuevo
 
Mensajes: 67
Registrado: 2008-05-29 15:22 @682
Ubicación: Guatemala

Publicidad

Re: Como manejar un error con XML::Simple

Notapor salva » 2009-09-17 02:55 @163

Lo primero que tienes que hacer es definir la estructura de los documentos de XML que vas a manejar usando alguna de las tecnologías que existen para ello.

Las que yo conozco son:


A mi el que más me gusta es RelaxNG que es a la vez simple y potente, sobre todo con la sintaxis compacta que es más amigable que escribir XML a pelo.

Una vez que tengas definido tu esquema, necesitas buscar un módulo de Perl que sea capaz de validar tus documentos contra él. En CPAN podrás encontrar varios y en la FAQ del proyecto XML-Perl también podrás encontrar información sobre el asunto.

Yo personalmente uso XML::LibXML (que es un wrapper de la librería libxml2), que soporta la validación con DTD, W3C Schema y RelaxNG... yo de hecho, ya hace tiempo que para procesar XML uso únicamente esta módulo, porque XML::Simple me resulta demasiado limitado.
Avatar de Usuario
salva
Perlero nuevo
Perlero nuevo
 
Mensajes: 200
Registrado: 2008-01-03 15:19 @680

Re: Como manejar un error con XML::Simple

Notapor explorer » 2009-09-17 04:08 @214

XML::Simple se morirá en el caso de que el xml sea no válido. Según la documentación de XML::Simple, en la sección ERROR HANDLING, lo que se puede hacer es poner un eval{} para capturar esos errores:

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.  
  9. my $data = q(
  10.     <recarga>
  11.         <plastico>4234588890123333</plastico>
  12.         <fechaven>200906</fechaven>
  13.         <documento>123456789</documento>
  14.         <moneda>320</moneda>
  15.         <valor>56.78</valor>
  16.     </recarga>
  17.     <recarga>
  18.         <plastico>4234567812345678</plastico>
  19.         <fechaven>200906</fechaven>
  20.         <documento>123456789</documento>
  21.         <moneda>320</moneda>
  22.         <valor>156.78</valor>
  23.     </recarga>
  24. );
  25.  
  26. my $xmls = XML::Simple->new;
  27. my $xml;
  28.  
  29. eval {
  30.     $xml = $xmls->XMLin( $data, KeyAttr => 1 );
  31. };
  32.  
  33. die "ERROR en la validación del xml: $!\n"
  34.     if $@;
  35.  
  36. my $moneda    = $xml->{moneda   };
  37. my $plastico  = $xml->{plastico };
  38. my $documento = $xml->{documento};
  39. my $fechaven  = $xml->{fechaven };
  40. my $valor     = $xml->{valor    };
  41.  
  42. print "$moneda|$plastico|$documento|$fechaven|$valor\n";
Coloreado en 0.002 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: Cómo manejar un error con XML::Simple

Notapor teco000 » 2009-09-17 09:41 @445

Gracias por la ayuda. Problema resuelto.
teco000
Perlero nuevo
Perlero nuevo
 
Mensajes: 67
Registrado: 2008-05-29 15:22 @682
Ubicación: Guatemala


Volver a Básico

¿Quién está conectado?

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