В настоящее время я использую Perl-модуль XML :: LibXML для проверки XML-файла по определенной XML-схеме. В настоящий момент, если мой XML-файл не сможет успешно пройти проверку на соответствие определенной XML-схеме, я получу список ошибок, сообщающих мне, например, что некоторые элементы не были ожидаемыми, а затем то, что ожидалось вместо этого. В моем XML-файле у меня будет много элементов с одинаковыми именами, но они могут быть вложены в различные места XML-файла.
У меня такой вопрос, есть ли в любом случае, я могу вывести местоположение XPath любых элементов, которые могут произойти ошибка при попытке выполнить проверку?
В настоящее время мой XML-файл довольно большой, и его трудно «отладить», если проверка не удалась, поскольку имя элемента, отображаемого в ошибке, может встречаться много раз в разных местах XML-файла.
Ниже приведен код для использования LibXML для проверки XML-файла по схеме.
#!/usr/bin/perl
use strict;
use warnings;
use XML::LibXML;
my $schema_file = 'MySchema.xml';
my $document = 'MyFile.xml';
my $schema = XML::LibXML::Schema->new(location => $schema_file);
my $parser = XML::LibXML->new;
my $doc = $parser->parse_file($document);
eval { $schema->validate($doc) };
die $@ if $@;
print "$document validated successfully\n";