use XML::Rules; my $parser = XML::Rules->new( rules => [ item => sub { '
  • ' . $_[1]->{_content} . '
  • '}, list => sub { for ($_[1]->{_content}) { s/^\s+//; s/\s+$//; s{\s+
  • }{
  • }g; } "\nTX
      " . $_[1]->{_content} . "
    \n" }, para => sub { 'TX ' . $_[1]->{_content}}, head => sub { 'TX

    ' . $_[1]->{_content} . "

    "}, 'doc.body' => 'content', ] ); use Data::Dumper; my $result = $parser->parse($XML)->{'doc.body'}; for ($result) { s/^\s+//; s/\s+$//; } print $result; __END__ C:\temp>c:\temp\reformatXML.pl TX

    Introduction

    TX para 1 TX para 2 TX

    Individual

    TX para 1 TX para 2: TX
    1. item 1
    2. 2