use strict; use warnings; use XML::TreePuller; use XML::Writer; my $fileA = < A B C XML my $fileB = < 1 5 10 XML # Open both input files open my $inA, "<", \$fileA; open my $inB, "<", \$fileB; my $readerA = XML::TreePuller->new (IO => $inA); my $readerB = XML::TreePuller->new (IO => $inB); my $writer = XML::Writer->new (DATA_MODE => 1); # Process the files parallel $readerA->iterate_at('/doc/elem' => 'short'); $readerB->iterate_at('/doc/elem' => 'short'); $writer->startTag ('doc'); while ((my $elmtA = $readerA->next ()) && (my $elmtB = $readerB->next ())) { my $nameA = $elmtA->name (); my $nameB = $elmtB->name (); next if $nameA ne 'elem'; die "Element mismatch: $nameA ne $nameB\n" if $nameA ne $nameB; $writer->dataElement ($nameA, $elmtA->text () x $elmtB->text ()); } $writer->endTag(); close $inA; close $inB;