Как я могу получить в строке / столбце файла XML, используя perl's XML :: SAX - PullRequest
1 голос
/ 07 марта 2011

Когда я анализирую XML и нахожу проблему, я хотел бы сказать, где проблема, то есть, по крайней мере, напечатать номер строки.Вот небольшой пример:

use XML::SAX;
my $gFactory = XML::SAX::ParserFactory->new ();
my $gParser = $gFactory->parser (Handler => EventHandler->new ());
$gParser->parse_uri ("foo.xml");
exit 0;

package EventHandler;
use base 'XML::SAX::Base';

sub start_element {
  my ($aSelf, $aElement) = @_;
  my ($name, $attributes) = ($aElement->{Name}, $aElement->{Attributes});
  print "at line/column/byte ...\n";
}

Что бы я использовал в операторе печати?Я искал в сети и нашел XML :: SAX :: DocumentLocator, но не уверен, что это то, что я ищу, и если да, то как его использовать.Любое нежное подталкивание в правильном направлении высоко ценится!

PS: Кажется, парсер, используемый под капотом, - libxml.

Ответы [ 2 ]

1 голос
/ 11 апреля 2011

Я перешел на использование XML::Parser::PerlSax. В этом модуле есть метод location() для возврата хэша с положением файла, строки, столбца, что и помогает. Смотри https://metacpan.org/pod/XML::Parser::PerlSAX

1 голос
/ 07 марта 2011

На этой странице (http://perl -xml.sourceforge.net / perl-sax / sax-2.1-ref.html ) это кажется простым. В исключениях говорится:

Если исключение возникает из-за разбирать ошибки, эти свойства также доступно:

ColumnNumber  The column number of the end of the text where the

возникла исключительная ситуация. LineNumber Номер строки конца текста, где находится исключение произошло. PublicId Открытый идентификатор объекта, в котором находится исключение произошло. SystemId Системный идентификатор объекта, в котором находится исключение произошло.

Похоже, вы можете получить номер строки и номер столбца, если возникнет исключительная ситуация при синтаксическом анализе или ошибка проверки.
Как сказано на странице, я упомянул: «Совместимые парсеры XML необходимы для прерывания обработки при возникновении ошибок правильности или проверки правильности».

Проверка будет включать имена атрибутов, не так ли?

...