#!/usr/bin/perl my $file_nb="000"; # write labels my (@labels) = split /\t/, ; my @labels= map { sanitize_label( $_) } @labels; my $file= "data-$file_nb.xml"; open( LABELS, ">$file") or die "cannot open $file: $!"; print LABELS qq{\n}, "", map( { "" . $_ . ""} @labels), "\n"; close LABELS; # write data while () { my %line; chomp; @line{@labels} = split /\t/; $file_nb++; my $file= "data-$file_nb.xml"; open( XML, ">$file") or die "cannot open $file: $!"; print XML qq{\n}, qq{}, map( { "<$_>" . xml_escape( $line{$_}), ""} @labels), "\n"; close XML; } # dumb way to make label valid XML names: remove all non word characters sub sanitize_label { my $label= shift; $label=~ s/[\W]//g; return $label; } # just escape the minimum: < and & sub xml_escape { my $text= shift; $text=~ s/&/&/g; $text=~ s/