找到特定元素时停止xml解析

时间:2010-11-03 06:23:29

标签: xml perl parsing

我有一个需要解析的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 个答案:

答案 0 :(得分:4)

您可以在eval中包含对parsefile的调用,然后在处理程序中死掉。然后,您需要测试$ @以查看解析是否成功

一个例子:

#!/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 wiki有一个list of recommended modules用于XML解析。