#!/usr/bin/perl use strict; use XML::Rules; use Data::Dumper; my $xml = q( p1 p2 c1_1 p3 c2 p4 c1_2 p5 ); my $parser = XML::Rules->new ( rules => [ root => 'no content', parent => sub { $_[1]->{text} = $_[1]->{_content}, delete $_[1]->{_content}, return ($_[0] => [$_[1]] , [$_[0] => $_[1]])} , ch1 => 'content array', ch2 => 'content array', ] ); my $result = $parser->parsestring($xml); print Dumper $result;