📄 stream.pm
字号:
# $Id: Stream.pm,v 1.1 2003/07/27 16:07:49 matt Exp $package XML::Parser::Style::Stream;use strict;# This style invented by Tim Bray <tbray@textuality.com>sub Init { no strict 'refs'; my $expat = shift; $expat->{Text} = ''; my $sub = $expat->{Pkg} ."::StartDocument"; &$sub($expat) if defined(&$sub);}sub Start { no strict 'refs'; my $expat = shift; my $type = shift; doText($expat); $_ = "<$type"; %_ = @_; while (@_) { $_ .= ' ' . shift() . '="' . shift() . '"'; } $_ .= '>'; my $sub = $expat->{Pkg} . "::StartTag"; if (defined(&$sub)) { &$sub($expat, $type); } else { print; }}sub End { no strict 'refs'; my $expat = shift; my $type = shift; # Set right context for Text handler push(@{$expat->{Context}}, $type); doText($expat); pop(@{$expat->{Context}}); $_ = "</$type>"; my $sub = $expat->{Pkg} . "::EndTag"; if (defined(&$sub)) { &$sub($expat, $type); } else { print; }}sub Char { my $expat = shift; $expat->{Text} .= shift;}sub Proc { no strict 'refs'; my $expat = shift; my $target = shift; my $text = shift; doText($expat); $_ = "<?$target $text?>"; my $sub = $expat->{Pkg} . "::PI"; if (defined(&$sub)) { &$sub($expat, $target, $text); } else { print; }}sub Final { no strict 'refs'; my $expat = shift; my $sub = $expat->{Pkg} . "::EndDocument"; &$sub($expat) if defined(&$sub);}sub doText { no strict 'refs'; my $expat = shift; $_ = $expat->{Text}; if (length($_)) { my $sub = $expat->{Pkg} . "::Text"; if (defined(&$sub)) { &$sub($expat); } else { print; } $expat->{Text} = ''; }}1;__END__=head1 NAMEXML::Parser::Style::Stream - Stream style for XML::Parser=head1 SYNOPSIS use XML::Parser; my $p = XML::Parser->new(Style => 'Stream', Pkg => 'MySubs'); $p->parsefile('foo.xml'); { package MySubs; sub StartTag { my ($e, $name) = @_; # do something with start tags } sub EndTag { my ($e, $name) = @_; # do something with end tags } sub Characters { my ($e, $data) = @_; # do something with text nodes } }=head1 DESCRIPTIONThis style uses the Pkg option to find subs in a given package to call for each event.If none of the subs that thisstyle looks for is there, then the effect of parsing with this style isto print a canonical copy of the document without comments or declarations.All the subs receive as their 1st parameter the Expat instance for thedocument they're parsing.It looks for the following routines:=over 4=item * StartDocumentCalled at the start of the parse .=item * StartTagCalled for every start tag with a second parameter of the element type. The $_variable will contain a copy of the tag and the %_ variable will containattribute values supplied for that element.=item * EndTagCalled for every end tag with a second parameter of the element type. The $_variable will contain a copy of the end tag.=item * TextCalled just before start or end tags with accumulated non-markup text inthe $_ variable.=item * PICalled for processing instructions. The $_ variable will contain a copy ofthe PI and the target and data are sent as 2nd and 3rd parametersrespectively.=item * EndDocumentCalled at conclusion of the parse.=back=cut
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -