#! perl use strict; use warnings; use Data::Dump; use XML::Twig; my $twig = XML::Twig->new ( twig_roots => { 'Body/QueryXmlResponse/QueryXmlResult/queryResult/data/row' => \&get_data, } ); my %data; $twig->parse(\*DATA); dd \%data; sub get_data { my ($twig, $row) = @_; $data{ $_->tag } = $_->text for $row->children; $twig->purge; } __DATA__