if (defined($match)) {
$self->SUPER::start_element($data);
- push @{$self->{'stack'}}, [ $data->{'Name'}, $self->{'level'}, $obj ];
+ push @{$self->{'stack'}}, [ $self->{'level'}, $obj ];
#
# This is sort of ugly. We special-case replacement by outputting
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;
}
}
if (scalar @$stack > 0) {
my $top = $stack->[scalar @$stack - 1];
- if ($data->{'Name'} eq $top->[0] && $self->{'level'} == $top->[1]) {
+ if ($self->{'level'} == $top->[0]) {
my $obj = $self->{'obj'};
# did we just finish a clone operation?
}
$self->SUPER::end_element($data);
- $self->{'obj'} = $top->[2];
+ $self->{'obj'} = $top->[1];
pop @$stack;
--$self->{'level'};
return;