2009-06-10 14 views
5

Estoy intentando ejecutar un programa simple de Perl que usa XML::Simple para imprimir los datos de un archivo XML. Sin embargo, el error que estoy recibiendo es:¿Por qué XML: Simple se queja de que "No se encontró ningún elemento"?

 
no element found at line 15, column 0, byte 308 at /usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi/XML/Parser.pm line 185 

El archivo XML es el siguiente:

<?xml version="1.0"?> 
<customer-data> 
<customer> 
<first_name>Frank</first_name> 
<last_name>Sanbeans</last_name> 
<dob>3/10</dob> 
<email>[email protected]</email> 
</customer> 
<customer> 
<first_name>Sandy</first_name> 
<last_name>Sanbeans</last_name> 
<dob>4/15</dob> 
<email>[email protected]</email> 
</customer> 

Y, mi código Perl es:

use strict; 
use XML::Simple; 

my $xml = XMLin('./test.xml',forcearray => 1); 
foreach my $customer (@{$xml->{customer}}) { 
    print "Name: $customer->{first_name}->[0] "; 
    print "$customer->{last_name}->[0]\n"; 
    print "Birthday: $customer->{dob}->[0]\n"; 
    print "E-mail Address: $customer->{email}->[0]\n"; 
} 

¿Cómo puede ser esto arreglado

Gracias.

Respuesta

7

Necesita una etiqueta de cierre de datos de cliente al final del documento para que esté bien formada. Es por eso que el analizador barfs al final del archivo.

0

Una mejor pregunta sería, Dado un error de esa naturaleza, ¿cómo puede encontrar dónde está el error en el archivo de datos? Proporciona un número de línea y un número de columna, pero en la mayoría de los casos el número de columna será de miles y no existe en el archivo. Mi respuesta a esa pregunta es, utilizar este código cuando se quiere encontrar dónde está el error:

use XML::SAX; 
use XML::LibXML::SAX; 
$XML::Simple::PREFERRED_PARSER = 'XML::LibXML::SAX'; 

Pero comentar que una vez que haya localizado el error, porque XML :: SAX es demasiado exigente para realmente analizar cualquier XML real

Cuestiones relacionadas