#!/usr/bin/perl use warnings; use strict; use XML::Simple; my $xmlstring = do { local $/; }; my $xs = new XML::Simple; my $xml = $xs->XMLin($xmlstring); foreach(@{$xml->{address}}) { my @tmp = sort { $a->{refid} cmp $b->{refid} } @{$_->{ref}}; $_->{ref} = \@tmp; } print $xs->XMLout($xml); __DATA__ xxxdata
address1 1 2 4
2 1
address1 1 2 3