use strict; use warnings; use Text::CSV; use XML::Twig; my $CSV = Text::CSV->new(); my $XML = XML::Twig->new( twig_handlers => { product => sub { my @data; push @data, $_->att('description'); my $c_i = $_->first_child('catalog_item'); push @data, $c_i->att('gender'); ### Gather the other fields here, then... $CSV->print(*STDOUT, \@data); print "\n"; }, }, pretty_print => 'indented', ); $XML->parsestring(*DATA); __DATA__ QWZ5671 39.95 Red Burgundy Red Burgundy RRX9856 42.50 Red Navy Burgundy Red Navy Burgundy Black Navy Black Burgundy Black