Проверка XML в Perl с помощью libxml и XSD-файла - PullRequest
3 голосов
/ 03 августа 2010

Я пытаюсь, чтобы мой Perl-скрипт получил Xxml-файл из Интернета и проверил его в соответствии с XSD-файлом.

Код для этого следующий:

my $url = shift @ARGV;
my $response = $ua->get($url) || die "Can't fetch file";
my $file = $response->content;

my $schema_file = "schema.xsd";
my $schema = XML::LibXML::Schema->new(location => $schema_file);
my $parser = XML::LibXML->new;
my $doc    = $parser->parse_string($file);
eval { $schema->validate($doc) };
die $@ if $@;

Выполнение этой команды приводит к загадочной ошибке: «Ошибка проверки содержимого данных элемента данных» (cropdata - первый из моих не корневых тегов).

В моем XSD-файле запись выглядит так:

<xs:element name="cropdata">
<xs:complexType>
<xs:sequence>

Тогда куча "<xs:element..../>" а затем:

</xs:sequence>
</xs:complexType>
</xs:element>

Переход в отладчик perl показывает, что после запуска строки "my $doc = $parser->parse_string($file);" $ doc печатается как XML :: LibXML :: Document = SCALAR (0x6b99f0).

Может ли кто-нибудь помочь мне пролить свет на то, что я делаю неправильно? (Предупреждение: это может быть глупая ошибка, я бы не стал ее пренебрегать).

1 Ответ

0 голосов
/ 24 декабря 2010

Оказывается, что предоставленный мной образец xml-файла недействителен, и вот, после проверки и исправления в xmllint все работает.

...