use XML::Rules; my $parser = XML::Rules->new( style => 'filter', ident => ' ', rules => { _default => 'as array trim', elt => sub {delete $_[1]->{_content};$_[0] =>$_[1]}, 'elt_att,selt_att' => sub {$_[0] => $_[1]->{att}}, } ); $parser->filter(\*DATA); __DATA__