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);
21 my ($self, $data) = @_;
22 push @{$self->{'events'}}, [ 'E', $data ];
26 my ($self, $data) = @_;
27 push @{$self->{'events'}}, [ 'C', $data ];
31 my ($self, $data) = @_;
32 push @{$self->{'events'}}, [ 'c', $data ];
35 sub processing_instruction {
36 my ($self, $data) = @_;
37 push @{$self->{'events'}}, [ 'p', $data ];
41 my ($self, $data) = @_;
42 push @{$self->{'events'}}, [ 'e', $data ];
46 my ($self, $dest) = @_;
48 for my $event (@{$self->{'events'}}) {
49 my ($type, $data) = @$event;
51 $dest->start_element($data);
52 } elsif ($type eq 'C') {
53 $dest->characters($data);
54 } elsif ($type eq 'c') {
55 $dest->comment($data);
56 } elsif ($type eq 'p') {
57 $dest->processing_instruction($data);
58 } elsif ($type eq 'e') {
59 $dest->end_element($data);