function parseCsv(data, fieldSep, newLine) {
fieldSep = fieldSep || ',';
newLine = newLine || '\n';
var nSep = '\x1D';
var qSep = '\x1E';
var cSep = '\x1F';
var nSepRe = new RegExp(nSep, 'g');
var qSepRe = new RegExp(qSep, 'g');
var cSepRe = new RegExp(cSep, 'g');
var fieldRe = new RegExp('(?<=(^|[' + fieldSep + '\\n]))"(|[\\s\\S]+?(?<![^"]"))"(?=($|[' + fieldSep + '\\n]))', 'g');
var grid = [];
data.replace(/\r/g, '').replace(/\n+$/, '').replace(fieldRe, function(match, p1, p2) {
return p2.replace(/\n/g, nSep).replace(/""/g, qSep).replace(/,/g, cSep);
}).split(/\n/).forEach(function(line) {
var row = line.split(fieldSep).map(function(cell) {
return cell.replace(nSepRe, newLine).replace(qSepRe, '"').replace(cSepRe, ',');
});
grid.push(row);
});
return grid;
}
const csv = 'London,0.1278° W,51.5074° N,Europe/London\n'
+ 'New York,74.0060° W,40.7128° N,America/New_York\n';
var grid = parseCsv(csv);
console.log('==> grid: ' + JSON.stringify(grid, null, ' '));
var xml = grid.map(function(row) {
return '<Location>\n'
+ '<Name>' + row[0] + '<Name/>\n'
+ '<Address>\n'
+ '<Lat>' + row[1] + '</Lat>\n'
+ '<Lon>' + row[2] + '</Lon>\n'
+ '</Address>\n'
+ '<Timezone>' + row[3] + '</Timezone>\n'
+ '</Location>\n'
}).join('');
console.log('==> xml:\n' + xml);