summaryrefslogtreecommitdiff
path: root/Xerl
diff options
context:
space:
mode:
authorPaul Buetow (pluto.buetow.org) <paul@buetow.org>2013-09-28 15:05:33 +0200
committerPaul Buetow (pluto.buetow.org) <paul@buetow.org>2013-09-28 15:05:33 +0200
commitbaca91450129be699d6efc903f96450faff8b90b (patch)
tree1884d66c9a6094d68959e276895afb941e880472 /Xerl
parentd7f6c13f823bd53d7b5a3d5c004850b6b3d9307d (diff)
add parsing of CDATA, return SAX objects from sax method
Diffstat (limited to 'Xerl')
-rw-r--r--Xerl/XML/Reader.pm5
-rw-r--r--Xerl/XML/SAXHandler.pm19
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;
}