2009-06-10 30 views
5

Tôi đang cố gắng thực hiện một chương trình Perl đơn giản sử dụng XML::Simple để in ra dữ liệu từ một tệp XML. Tuy nhiên, lỗi tôi nhận được là:Tại sao XML: Đơn giản phàn nàn rằng "Không tìm thấy phần tử"?

 
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 

Các tập tin XML như sau:

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

Và, mã perl của tôi là:

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

Làm thế nào điều này có thể đã sửa ?

Cảm ơn bạn.

Trả lời

7

Cần thẻ đóng dữ liệu khách hàng ở cuối tài liệu để làm cho nó được định dạng tốt. Đó là lý do tại sao trình phân tích cú pháp phân tích ở cuối tệp.

0

Câu hỏi hay hơn là, Do có lỗi về bản chất đó, làm cách nào bạn có thể tìm thấy lỗi trong tệp dữ liệu ở đâu? Nó cung cấp một số dòng và số cột, nhưng trong hầu hết các trường hợp, số cột sẽ nằm trong hàng nghìn và không tồn tại trong tệp. Câu trả lời của tôi cho câu hỏi đó là, Sử dụng mã này khi bạn muốn tìm xem lỗi ở đâu:

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

Nhưng nhận xét nó ra khi bạn đã xác định được lỗi, bởi vì XML :: SAX là quá kén chọn thực sự phân tích bất kỳ XML thực sự nào.

Các vấn đề liên quan