diff options
Diffstat (limited to 'Xerl/XML')
| -rw-r--r-- | Xerl/XML/Reader.pm | 5 | ||||
| -rw-r--r-- | Xerl/XML/SAXHandler.pm | 19 |
2 files changed, 19 insertions, 5 deletions
diff --git a/Xerl/XML/Reader.pm b/Xerl/XML/Reader.pm index 96a8835..9d9d3d6 100644 --- a/Xerl/XML/Reader.pm +++ b/Xerl/XML/Reader.pm @@ -52,14 +52,15 @@ sub open($) { sub sax() { my Xerl::XML::Reader $self = $_[0]; + my $sax_handler = Xerl::XML::SAXHandler->new(); my $parser = XML::SAX::ParserFactory->parser( - Handler => Xerl::XML::SAXHandler->new() + Handler => $sax_handler ); $parser->parse_uri($self->get_path()); - return $parser->{xerl}{root}; + return $sax_handler->{xerl}{root}; } sub parse($) { diff --git a/Xerl/XML/SAXHandler.pm b/Xerl/XML/SAXHandler.pm index 9bbb32d..df07fca 100644 --- a/Xerl/XML/SAXHandler.pm +++ b/Xerl/XML/SAXHandler.pm @@ -34,6 +34,8 @@ use base qw(XML::SAX::Base); use strict; use warnings; +use 5.10.0; + use Data::Dumper; use Xerl::Base; @@ -46,6 +48,7 @@ sub start_document { $self->{xerl}{current} = undef; $self->{xerl}{stack} = []; + return undef; } @@ -62,18 +65,29 @@ sub start_element { $x->{current} = Xerl::XML::Element->new(); $x->{current}->set_name($doc->{Name}); - $x->{current}->set_params(\%params); + $x->{current}->set_params(\%params) if %params; ${$x->{stack}}[-1]->push_array($x->{current}) if @{$x->{stack}}; return undef; } +sub characters { + my ($self, $doc) = @_; + my $x = $self->{xerl}; + + $x->{last_data} = $doc->{Data}; + + return undef; +} + sub end_element { my ($self, $doc) = @_; my $x = $self->{xerl}; - $x->{current} = pop @{$x->{stack}}; + my $prev = pop @{$x->{stack}}; + $prev->{text} = $x->{last_data}; + $x->{current} = $prev; return undef; } @@ -83,7 +97,6 @@ sub end_document { my $x = $self->{xerl}; print Dumper $x->{root}; - exit; return undef; } |
