Прекращение синтаксического анализа XML при обнаружении определенного элемента - PullRequest
1 голос
/ 03 ноября 2010

У меня есть xml, который нужно проанализировать. мой

$parser = new XML::Parser(Handlers => 
        {Init => \&handle_Init, Start => \&handle_Start,
         Char => \&handle_Char, End =>\&handle_End, 
         Final => \&handle_Final});

 $parser->parsefile("ababab.xml");

В подпрограмме handle_Char, как только я нахожу определенный тег и его значение, я хочу остановиться.

Как это возможно?

1 Ответ

4 голосов
/ 03 ноября 2010

Вы можете обернуть вызов parsefile в eval, а затем умереть в обработчике.Затем вам нужно будет проверить $ @, чтобы увидеть, успешно ли выполнен синтаксический анализ

Пример:

#!/usr/bin/perl

use strict;
use warnings;

use XML::Parser;

my $p = XML::Parser->new(Handlers => { End => sub { if( $_[1] eq 'e') { die "ok"; } } });

print "parsing well-formed xml: ";
eval { $p->parse( '<d><b/><e/></d>'); };
if( $@ =~ m{^ok} ) { print "success\n"; } else { print $@; }

print "parsing malformed xml: ";
eval { $p->parse( '<d<b/><e/></d>'); };
if( $@ =~ m{^ok} ) { print "success\n"; } else { print $@; }

При этом я не буду использовать XML :: Parser.В вики Perl5 есть список рекомендуемых модулей для разбора XML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...