My input file is
TBLA COLA A B
TBLA COLB D E
TBLB COLX M N
TBLB COLD A B
TBLC COLD
Given the very simple data structure, It seems a bit unneccessary to use a whole XML writer. However, I'll assume that that the table and column names are valid XML tag names.
Here is a simple script that reads through the data without storing it in an intermediary data structure. It works with perl5 v10 and better.
use strict; use warnings; use feature 'say';
my $last_table;
say '';
while(<>) {
chomp;
my ($table, $col, $old, $new) = split /\t/;
s/&/&/g, s/</g for $old, $new;
# I'll assume $table and $col have sane names
if (not defined $last_table) {
say " <$table>";
} elsif ($last_table ne $table) {
say " $last_table>";
say " <$table>";
}
$last_table = $table;
say " <$col>";
say " $old ";
say " $new ";
say " $col>";
}
say " $last_table> if defined $last_table;
say '';