I did some correction in the code
while (<DB1>) {
chomp;
my ($root, $table, $header,$key) = split /\t/;
$xml_data->{$root}{$table}{NEW1}{$key} = [$key];
}
while (<DB2>) {
chomp;
my ($root, $table, $header,$key) = split /\t/;
$xml_data->{$root}{$table}{NEW2}{$key} = [$key];
}
while (<DIFF>) {
chomp;
my ($root, $table, $key, $col, $old, $new) = split /\t/;
$xml_data->{$root}{$table}{MODIFIED}{KEY}{$key}{$col}{oldvalue} = [$ol
+d];
$xml_data->{$root}{$table}{MODIFIED}{KEY}{$key}{$col}{newvalue} = [$ne
+w];
}
Changes which i did
1) Removed the db1 and db2 code as it is not required.
2. Old code
$xml_data->{$root}{$table}{NEW2} = [$key];
New code
$xml_data->{$root}{$table}{NEW2}{$key} = [$key];
This was required as if there are multiple rows were there for a table which were overwritten with last value as the root, table combination already exists. So from the result set it displayed only the last row in the xml.
Now the last problem is
$xml_data->{$root}{$table}{NEW2}{$key} = [$key];
the data is displayed as (Suppose Key value is ABC)
<ABC>ABC</ABC>
but it should be
<KEY>ABC</KEY>
This is coming because i added the key value for key only meaning code is working as expected, but i want KEY to be displayed instead of value