我正在尝试执行一个简单的Perl程序,该程序使用XML::Simple打印出XML文件中的数据。 但是,我得到的错误是:
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文件如下:
<?xml version="1.0"?>
<customer-data>
<customer>
<first_name>Frank</first_name>
<last_name>Sanbeans</last_name>
<dob>3/10</dob>
<email>frank@example.com</email>
</customer>
<customer>
<first_name>Sandy</first_name>
<last_name>Sanbeans</last_name>
<dob>4/15</dob>
<email>sandy@example.com</email>
</customer>
而且,我的perl代码是:
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";
}
如何解决这个问题?
谢谢。
答案 0 :(得分:7)
在文档末尾需要一个结束客户数据标记,以使其格式良好。这就是解析器barfs在文件末尾的原因。
答案 1 :(得分:0)
更好的问题是,鉴于此类错误,您如何找到数据文件中的错误位置?它给出了行号和列号,但在大多数情况下,列号将为数千,并且不存在于文件中。我对这个问题的回答是,当你想找到错误的位置时使用这段代码:
use XML::SAX;
use XML::LibXML::SAX;
$XML::Simple::PREFERRED_PARSER = 'XML::LibXML::SAX';
但是一旦找到错误就把它评论出来,因为XML :: SAX实际上解析任何真正的XML都太繁琐了。