Проверка XML в Perl с помощью libxml и XSD-файла
Я пытаюсь, чтобы мой 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 $@;
Выполнение этого приводит к зашифрованной ошибке: "Ошибка проверки содержимого элемента данных элемента" (параметр "Дата записи" - первый из моих не корневых тегов).
В моем XSD-файле запись выглядит так:
<xs:element name="cropdata">
<xs:complexType>
<xs:sequence>
Тогда куча<xs:element..../
>"а потом:
</xs:sequence>
</xs:complexType>
</xs:element>
Зайдя в Perl-отладчик, вы увидите, что после "my $doc = $parser->parse_string($file);"
run, $doc печатает как XML::LibXML::Document=SCALAR(0x6b99f0).
Может ли кто-нибудь помочь мне пролить свет на то, что я делаю неправильно? (Предупреждение: это может быть глупой ошибкой, я бы не стал ее игнорировать).
1 ответ
Оказывается, что предоставленный мной пример xml-файла был недействительным, и вот, после проверки и исправления в xmllint, все работает.