my $twig_handlers = { q{oa:ItemID[@agencyRole='Prefix_Number']} => \&ITEMnumber }; #### use strict; use XML::Rules; my $parser = XML::Rules->new( start_rules => { 'oa:ItemID' => sub {return $_[1]->{agencyRole} =~ /^(?:Prefix_Number|Stock_Number_Butted)$/} # this filters the s we are interested in }, rules => { 'oa:ID' => 'content', 'oa:ItemID' => sub { return $_[1]->{agencyRole} => $_[1]->{'oa:ID'} }, 'us:ItemMasterHeader' => sub { print "$_[1]->{Prefix_Number}$_[1]->{Stock_Number_Butted} \n"; return; } }, ); $parser->parse(\*DATA); __DATA__ 0123456 AAA 01234