Skip to content

Instantly share code, notes, and snippets.

@jayfresh
Last active August 31, 2021 16:29
Show Gist options
  • Select an option

  • Save jayfresh/11822b6a6e56c09feb0609dd61b6645f to your computer and use it in GitHub Desktop.

Select an option

Save jayfresh/11822b6a6e56c09feb0609dd61b6645f to your computer and use it in GitHub Desktop.

Revisions

  1. jayfresh revised this gist Aug 31, 2021. No changes.
  2. jayfresh created this gist Aug 31, 2021.
    47 changes: 47 additions & 0 deletions charlie-hr-company-xml-parser.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,47 @@
    var fs = require('fs'),
    xml2js = require('xml2js');

    var parser = new xml2js.Parser();
    fs.readFile(__dirname + '/company.xml', function(err, data) {
    parser.parseString(data, function (err, result) {
    var team = result.company['team-members'][0]['team-member'];
    var lines = [];
    team.forEach(member => {
    // create a line for each review, with the email as the first column
    var reviews = member.reviews[0].review;
    if (!reviews) return;
    var reviewLines = reviews.map(review => [
    member.email[0],
    ...Object.keys(review).map(key => {
    var item = review[key][0];
    // for the review Q&A, condense them into one field
    if (key === 'reviewee-answers' || key === 'reviewer-answers') {
    // the answers are in a property like 'reviewee-answer'
    // so chop the 's' off the end of the key
    item = item[key.slice(0, key.length - 1)];
    if (!item) {
    return key + '';
    }
    item = item.map(q => {
    var question = q['baked-review-question'][0].content[0];
    var answer = q.content[0];
    return `${question} // ${safeEscapeChars(answer) || 'n/a'}`;
    }).join(' // ');
    }
    return key + ': ' + (safeEscapeChars(item) || 'n/a');
    })
    ].join('\t'));
    lines = lines.concat(reviewLines);
    });
    fs.writeFile(__dirname + '/output.tsv', lines.join('\n'), function(err) {
    if (err) console.error(err);
    console.log(`OK: ${lines.length}`);
    });
    });
    });

    function safeEscapeChars(item) {
    return item
    && item.replace
    && item.replace(/\t/g,'\\t').replace(/\r?\n/g, '\\n');
    }