a fugly workaround.
use XML::SAX::Writer;
use XML::TemplateSAX::Buffer;
use XML::TemplateSAX::Cleaner;
+use XML::TemplateSAX::Deferred;
use XML::TemplateSAX::Handler;
package XML::TemplateSAX;
$clean = 1 unless (defined($clean));
my ($cleaner, $filter, $parser);
- my $str = '';
if ($clean) {
$cleaner = XML::TemplateSAX::Cleaner->new(Handler => $handler);
# FIXME: hardcoding expat = not good?
$parser = XML::SAX::Expat->new(Handler => $filter);
$parser->parse_file($filename);
-
- return $str;
}
sub process_file {
return $buffer;
}
+sub process_file_to_placeholder {
+ my ($filename, $obj, $clean) = @_;
+
+ return XML::TemplateSAX::Deferred->new($filename, $obj, $clean);
+}
+
sub alternate {
my ($tag, $array, @elems) = @_;
--- /dev/null
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+use XML::TemplateSAX;
+use Data::Dumper;
+package XML::TemplateSAX::Deferred;
+
+sub new {
+ my $class = shift;
+ my ($filename, $obj, $clean) = @_;
+
+ my $self = {
+ filename => $filename,
+ obj => $obj,
+ clean => $clean
+ };
+ bless($self, $class);
+ return $self;
+}
+
+sub parse {
+ my ($self, $handler) = @_;
+
+ my $buf = XML::TemplateSAX::process_file_to_buffer($self->{'filename'}, $self->{'obj'}, $self->{'clean'});
+ $buf->replay($handler);
+
+ # XML::TemplateSAX::process_file_to_handler($self->{'filename'}, $handler, $self->{'obj'}, $self->{'clean'});
+}
+
+1;
if (ref($match) eq 'XML::TemplateSAX::Buffer') {
$match->replay($self);
$self->{'obj'} = undef;
+ } elsif (ref($match) eq 'XML::TemplateSAX::Deferred') {
+ $match->parse($self);
+ $self->{'obj'} = undef;
+ } else {
+ $self->{'obj'} = $match;
}
-
- $self->{'obj'} = $match;
return;
}
}
#! /usr/bin/perl
use XML::TemplateSAX;
-my $doc = XML::TemplateSAX::process_file_to_buffer('../xml/included.xml', {
+my $doc = XML::TemplateSAX::process_file_to_placeholder('../xml/included.xml', {
'color' => 'red'
}, 0);
my $master = XML::TemplateSAX::process_file('../xml/master.xml', {