use strict; use XML::Rules; my %good_division_number = map( ($_ => 1), qw(30 31 32 35 38)); my $parser = XML::Rules->new( stripspaces => 7, rules => { _default => '', Division => sub { if ( $good_division_number{ $_[1]->{DivisionNumber} }) { return '+Bedrooms' => $_[1]->{DivisionQuantity}; } else { return; } }, Divisions => 'pass', DivisionHouseRoom => sub { print "$_[1]->{HouseCode}\t$_[1]->{Bedrooms}\n"; return; }, root => 'pass', } ); open my $fh, ">", "Result.csv" or die $!; my $old = select($fh); $parser->parse(\*DATA); close $fh; select $old; print "DONE\n"; __DATA__