use strict; use warnings; use XML::Twig; my $field = "Nest1"; my $twig = XML::Twig->new( twig_handlers => {'/DatatoParse/elt' => \&elt_map,} ); $/=''; $twig->parse(); sub elt_map{ my $elt = $_[1]; print join ',', map { my @cur = $elt->get_xpath($_); $cur[0]->text; }(qw( d1 d2 ./Nest1/elt/Junk1 ./Nest1/elt/Junk2 ./Nest1/elt/Nest2/elt/d5/X ./Nest1/elt/Nest2/elt/d5/Y ./Nest1/elt/Nest2/elt/d6/X ./Nest1/elt/Nest2/elt/d6/Y ./Nest1/elt/Nest2/elt/Nest3/Nest4/d7/d9/d10/d11 )); print "\n" } __DATA__ TV show 1 ....