use XML::Rules; my %seen; my $parser = XML::Rules->new( rules => [ '_default' => '', 'meta-parameter' => sub { return unless $_[1]->{type} eq "stored-procedure"; $seen{$_[1]->{id}}++; return; } ] ); $parser->parse(\*DATA); print "There were those stored procedures:\n"; foreach (sort keys %seen) { print " $_ ($seen{$_} times)\n"; } __DATA__ \ \ \