来一个event-based的XML解析,其实Style的Stream方法就是一个event-based的XML解析。
参考文献:http://search.cpan.org/~msergeant/XML-Parser-2.36/Parser.pm#HANDLERS
操纵文档:
[root@dou xml]# cat sample1
<FORECAST>
<OUTLOOK>
Partly Cloudy
</OUTLOOK>
<TEMPERATURE TYPE="MAX" degrees="C">12</TEMPERATURE>
<TEMPERATURE TYPE="MIN" degrees="C">6</TEMPERATURE>
</FORECAST>
[root@dou xml]#
perl脚本:
[root@dou xml]# cat sample4.pl
#!/usr/bin/perl -w
use strict;
use XML::Parser;
my $file = "sample1";
my $p = XML::Parser->new(Handlers => {Start => \&start,
End => \&end,
Char => \&char,});
my $text;
my @attr;
$p->parsefile($file);
sub start {
my ($p,$tag) = (shift,shift);
@attr = @_ if @_;
}
sub end {
my ($p,$tag) = @_;
if ($tag eq "OUTLOOK") {
print "OUTLOOK: $text\n";
}elsif ($tag eq "TEMPERATURE") {
print "$attr[1]: $text $attr[3]\n";
}
$text = '';
}
sub char {
my ($p,$str) = @_;
return unless $str =~ /\S/;
$str =~ s/^\s+//;
$str =~ s/\s+$//;
$text .= $str;
}
[root@dou xml]#
执行结果:
[root@dou xml]# perl sample4.pl
OUTLOOK: Partly Cloudy
MAX: 12 C
MIN: 6 C
这个方法不错,解析简单的XML很顺手。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。