[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/se3-unattended/var/se3/unattended/install/linuxaux/opt/perl/lib/site_perl/5.10.0/i586-linux-thread-multi/XML/Parser/Style/ -> Stream.pm (source)

   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


Generated: Tue Mar 17 22:47:18 2015 Cross-referenced by PHPXref 0.7.1