4 # SAX version of XML::Template. Advantages over DOM: Doesn't have to load
5 # the entire thing into memory, and you can chain filters. Disadvantages:
6 # Slightly kludgier interface.
8 # Differences from the DOM version:
10 # - There is no process(). Instead, it works as a SAX filter, so you put it
11 # in the stream, usually between a parser and a writer (ie.
12 # parser -> XML::TemplateSAX::Handler -> writer). process_file works as
13 # before, but it returns a _string_, not a DOM tree.
14 # - You can no longer insert a DOM tree. Instead, what you have is -- FIXME:
21 package XML::TemplateSAX::Handler;
22 use base qw(XML::SAX::Base);
29 obj => $options{'Content'},
30 Handler => $options{'Handler'}
37 my ($self, $data) = @_;
39 $self->SUPER::start_element($data);
42 package XML::TemplateSAX;
45 my ($filename, $obj, $clean) = @_;
49 # FIXME: hardcoding expat = not good?
50 my $writer = XML::SAX::Writer->new(Output => \$str);
51 my $filter = XML::TemplateSAX::Handler->new(Handler => $writer, Content => $obj);
52 my $parser = XML::SAX::Expat->new(Handler => $filter);
53 $parser->parse_file($filename);