2009-06-10 3 views
5

XML::Simple을 사용하여 XML 파일의 데이터를 인쇄하는 간단한 Perl 프로그램을 실행하려고합니다. 그러나, 내가 갖는 오류는 다음과 같습니다XML : Simple이 "요소를 찾을 수 없습니다"라는 이유는 무엇입니까?

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

을 그리고, 내 펄 코드는 다음과 같습니다 :

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

이 방법이 될 수는 다음과 같이

 
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 

XML 파일입니다 고정?

감사합니다.

답변

7

잘 작성하려면 문서 끝 부분에 고객 데이터 태그가 필요합니다. 그래서 파서는 파일의 끝에 barfs를합니다.

0

더 좋은 질문은, 자연의 오류를 감안할 때 데이터 파일의 오류 위치를 어떻게 찾을 수 있습니까? 행 번호와 열 번호를 제공하지만 대부분의 경우 열 번호는 수천 개이며 파일에는 존재하지 않습니다.

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

을하지만 오류를 찾았 으면 그것을 주석 실제로 구문 분석에 XML :: SAX이 너무 까다로운 때문에 : 그 질문에 대한 내 대답은 오류가 어디 있는지 찾을 때이 코드를 사용한다 모든 실제 XML.

관련 문제