Obecnie używam modułu perl XML :: LibXML do sprawdzania poprawności pliku XML względem zdefiniowanego schematu XML. W tej chwili, jeśli mój plik XML nie zostanie pomyślnie sprawdzony w odniesieniu do zdefiniowanego schematu XML, otrzymam listę błędów informujących mnie, na przykład, że pewne elementy nie były oczekiwane, a następnie to, czego oczekiwano. W moim pliku XML będę miał wiele elementów o tej samej nazwie, ale mogą one być zagnieżdżone w różnych miejscach w pliku XML.Sprawdzanie poprawności XML za pomocą LibXML
Moje pytanie brzmi: czy w ogóle mogę wypisać lokalizację XPath elementów, które mogą być błędami podczas próby sprawdzenia poprawności?
Obecnie mój plik XML jest dość duży i trudno go "debugować", gdy sprawdzanie poprawności nie powiedzie się, ponieważ nazwa elementu wyświetlanego w błędzie może występować wiele razy w różnych miejscach pliku XML.
Mój kod znajduje się poniżej, aby skorzystać z LibXML do sprawdzania poprawności pliku XML względem schematu.
#!/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 [email protected] if [email protected];
print "$document validated successfully\n";
Jeśli spojrzeć na źródło XML :: Waliduj :: libxml, zobaczysz, że nie zgłasza wiersz i kolumnę podczas sprawdzania za pomocą LibXML. Możesz użyć innej biblioteki do sprawdzenia poprawności. – cjm