[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 # $Id: Stream.pm,v 1.1 2003/07/27 16:07:49 matt Exp $ 2 3 package XML::Parser::Style::Stream; 4 use strict; 5 6 # This style invented by Tim Bray <tbray@textuality.com> 7 8 sub Init { 9 no strict 'refs'; 10 my $expat = shift; 11 $expat->{Text} = ''; 12 my $sub = $expat->{Pkg} ."::StartDocument"; 13 &$sub($expat) 14 if defined(&$sub); 15 } 16 17 sub Start { 18 no strict 'refs'; 19 my $expat = shift; 20 my $type = shift; 21 22 doText($expat); 23 $_ = "<$type"; 24 25 %_ = @_; 26 while (@_) { 27 $_ .= ' ' . shift() . '="' . shift() . '"'; 28 } 29 $_ .= '>'; 30 31 my $sub = $expat->{Pkg} . "::StartTag"; 32 if (defined(&$sub)) { 33 &$sub($expat, $type); 34 } else { 35 print; 36 } 37 } 38 39 sub End { 40 no strict 'refs'; 41 my $expat = shift; 42 my $type = shift; 43 44 # Set right context for Text handler 45 push(@{$expat->{Context}}, $type); 46 doText($expat); 47 pop(@{$expat->{Context}}); 48 49 $_ = "</$type>"; 50 51 my $sub = $expat->{Pkg} . "::EndTag"; 52 if (defined(&$sub)) { 53 &$sub($expat, $type); 54 } else { 55 print; 56 } 57 } 58 59 sub Char { 60 my $expat = shift; 61 $expat->{Text} .= shift; 62 } 63 64 sub Proc { 65 no strict 'refs'; 66 my $expat = shift; 67 my $target = shift; 68 my $text = shift; 69 70 doText($expat); 71 72 $_ = "<?$target $text?>"; 73 74 my $sub = $expat->{Pkg} . "::PI"; 75 if (defined(&$sub)) { 76 &$sub($expat, $target, $text); 77 } else { 78 print; 79 } 80 } 81 82 sub Final { 83 no strict 'refs'; 84 my $expat = shift; 85 my $sub = $expat->{Pkg} . "::EndDocument"; 86 &$sub($expat) 87 if defined(&$sub); 88 } 89 90 sub doText { 91 no strict 'refs'; 92 my $expat = shift; 93 $_ = $expat->{Text}; 94 95 if (length($_)) { 96 my $sub = $expat->{Pkg} . "::Text"; 97 if (defined(&$sub)) { 98 &$sub($expat); 99 } else { 100 print; 101 } 102 103 $expat->{Text} = ''; 104 } 105 } 106 107 1; 108 __END__ 109 110 =head1 NAME 111 112 XML::Parser::Style::Stream - Stream style for XML::Parser 113 114 =head1 SYNOPSIS 115 116 use XML::Parser; 117 my $p = XML::Parser->new(Style => 'Stream', Pkg => 'MySubs'); 118 $p->parsefile('foo.xml'); 119 120 { 121 package MySubs; 122 123 sub StartTag { 124 my ($e, $name) = @_; 125 # do something with start tags 126 } 127 128 sub EndTag { 129 my ($e, $name) = @_; 130 # do something with end tags 131 } 132 133 sub Characters { 134 my ($e, $data) = @_; 135 # do something with text nodes 136 } 137 } 138 139 =head1 DESCRIPTION 140 141 This style uses the Pkg option to find subs in a given package to call for each event. 142 If none of the subs that this 143 style looks for is there, then the effect of parsing with this style is 144 to print a canonical copy of the document without comments or declarations. 145 All the subs receive as their 1st parameter the Expat instance for the 146 document they're parsing. 147 148 It looks for the following routines: 149 150 =over 4 151 152 =item * StartDocument 153 154 Called at the start of the parse . 155 156 =item * StartTag 157 158 Called for every start tag with a second parameter of the element type. The $_ 159 variable will contain a copy of the tag and the %_ variable will contain 160 attribute values supplied for that element. 161 162 =item * EndTag 163 164 Called for every end tag with a second parameter of the element type. The $_ 165 variable will contain a copy of the end tag. 166 167 =item * Text 168 169 Called just before start or end tags with accumulated non-markup text in 170 the $_ variable. 171 172 =item * PI 173 174 Called for processing instructions. The $_ variable will contain a copy of 175 the PI and the target and data are sent as 2nd and 3rd parameters 176 respectively. 177 178 =item * EndDocument 179 180 Called at conclusion of the parse. 181 182 =back 183 184 =cut
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Tue Mar 17 22:47:18 2015 | Cross-referenced by PHPXref 0.7.1 |