sub parseUserSearchXML { my $XMLParser = new XML::Parser(Handlers => {Start => \&startHandler, End => \&endHandler, Char => \&charHandler}); my $node; $XMLParser->parsefile($filename); } # event handler for XML::Parser - start tag event sub startHandler { my ($expat, $tag, %attributes) = @_; $buffer = ''; unless($tag =~ /$tags_to_ignore/o) { %temp = %attributes; } } # event handler for XML::Parser - non-markup event sub charHandler { my ($expat, $string) = @_; $buffer .= $string; } # event handler for XML::Parser - end tag event sub endHandler { my ($expat, $tag) = @_; unless($tag =~ /$tags_to_ignore/o) { $buffer =~ s/ \($crap_to_remove\)$//o; # strip (person) (place) (thing) or (idea) $nodes{$buffer} = {%temp}; } $buffer = ''; }