use strict; use XML::Rules; my @contents = ('first trimmed content', 'second trimmed content'); my $parser = XML::Rules->new( style => 'filter', start_rules => { content => 'skip', }, rules => { _default => 'raw', product => sub { my ($tag, $attr, $parser) = @_[0,1,4]; $attr->{content} = [ $contents[ $parser->{pad}++ ] ]; return $tag => $attr; } }, ); $parser->filter(\*DATA); __DATA__ 2008-10-15 124 heinous amount of unwanted text red 2009/01/30 10 heinous amount of unwanted text black #### use strict; use XML::Rules; my @contents = ('first trimmed content', 'second trimmed content'); my $parser = XML::Rules->new( style => 'filter', ident => ' ', stripspaces => 3, start_rules => { content => 'skip', }, rules => { _default => 'content array', product => sub { my ($tag, $attr, $parser) = @_[0,1,4]; $attr->{content} = [ $contents[ $parser->{pad}++ ] ]; return $tag => $attr; } }, ); $parser->filter(\*DATA); __DATA__ 2008-10-15 124 heinous amount of unwanted text red 2009/01/30 10 heinous amount of unwanted text black