2009-06-10 7 views
5

Ich versuche, ein einfaches Perl-Programm auszuführen, das XML::Simple verwendet, um die Daten aus einer XML-Datei auszugeben. Aber ich bin immer der Fehler:Warum beklagt XML: Simple, dass "Kein Element gefunden"?

<?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> 

Und mein Perl-Code ist:

 
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 

Die XML-Datei ist wie folgt

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"; 
} 

Wie kann das sein Fest ?

Vielen Dank.

Antwort

7

Benötigen Sie ein abschließendes Kundendaten-Tag am Ende des Dokuments, um es gut zu gestalten. Aus diesem Grund stößt der Parser am Ende der Datei an.

0

Eine bessere Frage wäre, Bei einem solchen Fehler, wie können Sie herausfinden, wo der Fehler in der Datendatei ist? Es gibt eine Zeilennummer und eine Spaltennummer, aber in den meisten Fällen wird die Spaltennummer in den Tausenden sein und ist nicht in der Datei vorhanden. Meine Antwort auf diese Frage ist, diesen Code verwenden, wenn Sie finden möchten, wo der Fehler ist:

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

Aber es kommentieren Sie, wenn Sie den Fehler gefunden haben, weil XML :: SAX zu pingelig ist, um tatsächlich zu analysieren jedes echte XML.

Verwandte Themen