summaryrefslogtreecommitdiff
path: root/Xerl
diff options
context:
space:
mode:
Diffstat (limited to 'Xerl')
-rw-r--r--Xerl/XML/SAXHandler.pm91
1 files changed, 91 insertions, 0 deletions
diff --git a/Xerl/XML/SAXHandler.pm b/Xerl/XML/SAXHandler.pm
new file mode 100644
index 0000000..9bbb32d
--- /dev/null
+++ b/Xerl/XML/SAXHandler.pm
@@ -0,0 +1,91 @@
+# Xerl (c) 2005-2011,2013 Dipl.-Inform. (FH) Paul C. Buetow
+#
+# E-Mail: xerl@dev.buetow.org WWW: http://xerl.buetow.org
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * Neither the name of buetow.org nor the names of its contributors may
+# be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED Paul C. Buetow ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT Paul C. Buetow BE LIABLE FOR ANY DIRECT,
+# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+package Xerl::XML::SAXHandler;
+
+use base qw(XML::SAX::Base);
+
+use strict;
+use warnings;
+
+use Data::Dumper;
+
+use Xerl::Base;
+use Xerl::XML::Element;
+
+sub start_document {
+ my ($self, $doc) = @_;
+
+ $self->{xerl}{root} = undef;
+ $self->{xerl}{current} = undef;
+ $self->{xerl}{stack} = [];
+
+ return undef;
+}
+
+sub start_element {
+ my ($self, $doc) = @_;
+ my $x = $self->{xerl};
+
+ if (defined $x->{current}) {
+ push @{$x->{stack}}, $x->{current};
+ $x->{root} = $x->{current} unless defined $x->{root};
+ }
+
+ my %params = map { $_->{Name} => $_->{Value} } values %{$doc->{Attributes}};
+
+ $x->{current} = Xerl::XML::Element->new();
+ $x->{current}->set_name($doc->{Name});
+ $x->{current}->set_params(\%params);
+
+ ${$x->{stack}}[-1]->push_array($x->{current}) if @{$x->{stack}};
+
+ return undef;
+}
+
+sub end_element {
+ my ($self, $doc) = @_;
+ my $x = $self->{xerl};
+
+ $x->{current} = pop @{$x->{stack}};
+
+ return undef;
+}
+
+sub end_document {
+ my ($self, $doc) = @_;
+ my $x = $self->{xerl};
+
+ print Dumper $x->{root};
+ exit;
+
+ return undef;
+}
+
+1;