From 447c48c83c05942eea8af188a6b031171af3ecef Mon Sep 17 00:00:00 2001 From: "sgunderson@bigfoot.com" <> Date: Thu, 1 Mar 2007 03:09:12 +0100 Subject: [PATCH] Introduce a SAX cleaner. --- perl-sax/XML/TemplateSAX.pm | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/perl-sax/XML/TemplateSAX.pm b/perl-sax/XML/TemplateSAX.pm index d2eb7a5..18c8d68 100644 --- a/perl-sax/XML/TemplateSAX.pm +++ b/perl-sax/XML/TemplateSAX.pm @@ -111,17 +111,42 @@ sub end_element { $self->SUPER::end_element($data); } +package XML::TemplateSAX::Cleaner; +use base qw(XML::SAX::Base); + +sub start_element { + my ($self, $data) = @_; + my $attrs = $data->{'Attributes'}; + + for my $a (keys %$attrs) { + if ($attrs->{$a}->{'NamespaceURI'} eq 'http://template.sesse.net/') { + delete $attrs->{$a}; + } + } + + $self->SUPER::start_element($data); +} + package XML::TemplateSAX; sub process_file { my ($filename, $obj, $clean) = @_; + $clean = 1 unless (defined($clean)); + my ($writer, $cleaner, $filter, $parser); my $str = ''; # FIXME: hardcoding expat = not good? - my $writer = XML::SAX::Writer->new(Output => \$str); - my $filter = XML::TemplateSAX::Handler->new(Handler => $writer, Content => $obj); - my $parser = XML::SAX::Expat->new(Handler => $filter); + $writer = XML::SAX::Writer->new(Output => \$str); + + if ($clean) { + $cleaner = XML::TemplateSAX::Cleaner->new(Handler => $writer, Content => $obj); + $filter = XML::TemplateSAX::Handler->new(Handler => $cleaner, Content => $obj); + } else { + $filter = XML::TemplateSAX::Handler->new(Handler => $writer, Content => $obj); + } + + $parser = XML::SAX::Expat->new(Handler => $filter); $parser->parse_file($filename); return $str; -- 2.39.2