#!/usr/bin/perl -w use strict; use XML::Twig; my $xml = XML::Twig->new( pretty_print => 'indented', ); $xml->parse(\*DATA); # get all parents. my @parents = do { my %name = map { my $p = $_->parent(); "$p" => $p; } $xml->root()->get_xpath('//name'); values %name; }; foreach my $parent (@parents) { my @name = $parent->get_xpath('name'); my @names = map { $_->cut(); $_->text() } @name; my $names = XML::Twig::Elt->new('names', join ',', @names); $names->paste($parent); } $xml->print; __END__ abc def ghi blah jkl mno pqr blah abc def ghi blah #### abc,def,ghi blah jkl,mno,pqr blah abc,def,ghi blah