use XML::Rules; my $parser = XML::Rules->new( rules => { __default => 'skip', 'channelName,name' => 'content', 'cat' => sub { return $_[1]->{channelName} => $_[1]->{name} }, 'rootTagName' => 'pass', } ); my $data = $parser->parse($xml);