package xmlleaves; use strict; use XML::SAX::Base; use Data::Dumper; our @ISA = ('XML::SAX::Base'); sub specify_element_of_interest { my $self = shift; my $element_of_interest = shift; $self->{'ElementOfInterest'} = $element_of_interest; $self->{'Recording'} = 0; $self->{'ListOfNameValuePairs'} = (); } sub print_vars { my $self = shift; print "Element of Interest = " . $self->{'ElementOfInterest'} . ": \n\n"; my $l = $self->{'ListOfNameValuePairs'}; foreach(@{$l}) { my $h = $_; foreach(keys %{$h}) { print "\t $_ = $h->{$_} \n"; } print "\n"; } } sub shift_var { my $self = shift; return shift ( @{ $self->{'ListOfNameValuePairs'} }); } sub start_document { my $self = shift; my $data = shift; $self->SUPER::start_document($data); } sub start_element { my $self = shift; my $data = shift; if($data->{'Name'} eq $self->{'ElementOfInterest'}) { $self->{'Recording'} = 1; $self->{'CurrentNameValuePairs'} = {}; } elsif($self->{'Recording'}) { $self->{'Name'} = $data->{'Name'}; } $self->SUPER::start_element($data); } sub end_element { my $self = shift; my $data = shift; if($data->{'Name'} eq $self->{'ElementOfInterest'}) { $self->{'Recording'} = 0; push(@{$self->{'ListOfNameValuePairs'}},$self->{'CurrentNameValuePairs'}); } $self->SUPER::start_element($data); } sub characters { my $self = shift; my $data = shift; if($self->{'Recording'}) { my $element_name = $self->{'Name'}; $self->{'CurrentNameValuePairs'}->{"$element_name"} = $data->{'Data'}; } $self->SUPER::characters($data); } 1;