use strict; use warnings; use XML::Simple; use Data::Dumper; my $data = XMLin(\*DATA, ForceArray => 1); for my $trans (@{ $data->{trans} }) { next unless $trans->{kool} eq 'max'; $trans->{item} = [$trans->{item}] unless ref $trans->{item} eq 'ARRAY'; push @{ $trans->{item} }, { maxis => { assignee => ['jill'], status => ['con'] } }; } print XMLout($data, KeyAttr => 'id'); __DATA__ contacted jack contacted jack