use warnings; use strict; use XML::Rules; my @attribs = qw( townname allianceticker playername townname mapy mapx ); my @rules = ( town => sub { my $town = $_[1]; return if $town->{mapx} <= 500; print join(",", @$town{@attribs}), "\n"; return; }, 'player,towndata,location,playeralliance' => 'pass no content', _default => 'content', ); my $xr = XML::Rules->new( rules => \@rules ); $xr->parsefile('tmp.xml');