#!/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