В настоящее время я использую модуль XML::LibXML perl для проверки 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";