加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl 使用XML::Parser的Handler解析XML

发布时间:2020-12-15 21:01:16 所属栏目:大数据 来源:网络整理
导读:来一个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 ? /O

来一个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: $textn";
??????? }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很顺手。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读