Почему XML: Simple жалуется, что «элемент не найден»? - PullRequest
5 голосов
/ 11 июня 2009

Я пытаюсь выполнить простую программу на 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";
}

Как это можно исправить?

Спасибо.

Ответы [ 2 ]

7 голосов
/ 11 июня 2009

Нужен закрывающий тэг данных клиента в конце документа, чтобы он был правильно сформирован. Вот почему парсер barfs в конце файла.

0 голосов
/ 13 сентября 2013

Лучший вопрос был бы: При наличии ошибки такого рода, как вы можете найти, где находится ошибка в файле данных? Он дает номер строки и номер столбца, но в большинстве случаев номер столбца будет в тысячах и не существует в файле. Мой ответ на этот вопрос: используйте этот код, если вы хотите найти, где находится ошибка:

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

Но закомментируйте это, как только вы обнаружите ошибку, потому что XML :: SAX слишком суетлив, чтобы фактически анализировать любой настоящий XML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...