3 # A utility class that can store SAX events and replay them back to some SAX
4 # handler as many times as you'd like. Useful for both cloning and including.
6 package XML::TemplateSAX::Buffer;
7 use base qw(XML::SAX::Base);
22 my ($self, $data) = @_;
23 push @{$self->{'events'}}, [ 'E', $data ];
27 my ($self, $data) = @_;
28 push @{$self->{'events'}}, [ 'C', $data ];
32 my ($self, $data) = @_;
33 push @{$self->{'events'}}, [ 'c', $data ];
36 sub processing_instruction {
37 my ($self, $data) = @_;
38 push @{$self->{'events'}}, [ 'p', $data ];
42 my ($self, $data) = @_;
43 push @{$self->{'events'}}, [ 'e', $data ];
47 my ($self, $dest) = @_;
49 for my $event (@{$self->{'events'}}) {
50 my ($type, $data) = @$event;
52 $dest->start_element($data);
53 } elsif ($type eq 'C') {
54 $dest->characters($data);
55 } elsif ($type eq 'c') {
56 $dest->comment($data);
57 } elsif ($type eq 'p') {
58 $dest->processing_instruction($data);
59 } elsif ($type eq 'e') {
60 $dest->end_element($data);