94 lines
2.4 KiB
Text
94 lines
2.4 KiB
Text
|
#!/usr/bin/env node
|
||
|
'use strict';
|
||
|
/*eslint-disable no-console*/
|
||
|
const fs = require('fs');
|
||
|
const path = require('path');
|
||
|
const {XMLParser, XMLValidator} = require("../fxp");
|
||
|
const readToEnd = require('./read').readToEnd;
|
||
|
|
||
|
const version = require('./../../package.json').version;
|
||
|
if (process.argv[2] === '--help' || process.argv[2] === '-h') {
|
||
|
console.log(require("./man"));
|
||
|
} else if (process.argv[2] === '--version') {
|
||
|
console.log(version);
|
||
|
} else {
|
||
|
const options = {
|
||
|
removeNSPrefix: true,
|
||
|
ignoreAttributes: false,
|
||
|
parseTagValue: true,
|
||
|
parseAttributeValue: true,
|
||
|
};
|
||
|
let fileName = '';
|
||
|
let outputFileName;
|
||
|
let validate = false;
|
||
|
let validateOnly = false;
|
||
|
for (let i = 2; i < process.argv.length; i++) {
|
||
|
if (process.argv[i] === '-ns') {
|
||
|
options.removeNSPrefix = false;
|
||
|
} else if (process.argv[i] === '-a') {
|
||
|
options.ignoreAttributes = true;
|
||
|
} else if (process.argv[i] === '-c') {
|
||
|
options.parseTagValue = false;
|
||
|
options.parseAttributeValue = false;
|
||
|
} else if (process.argv[i] === '-o') {
|
||
|
outputFileName = process.argv[++i];
|
||
|
} else if (process.argv[i] === '-v') {
|
||
|
validate = true;
|
||
|
} else if (process.argv[i] === '-V') {
|
||
|
validateOnly = true;
|
||
|
} else {
|
||
|
//filename
|
||
|
fileName = process.argv[i];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
const callback = function(xmlData) {
|
||
|
let output = '';
|
||
|
if (validate) {
|
||
|
const parser = new XMLParser(options);
|
||
|
output = parser.parse(xmlData,validate);
|
||
|
} else if (validateOnly) {
|
||
|
output = XMLValidator.validate(xmlData);
|
||
|
process.exitCode = output === true ? 0 : 1;
|
||
|
} else {
|
||
|
const parser = new XMLParser(options);
|
||
|
output = JSON.stringify(parser.parse(xmlData,validate), null, 4);
|
||
|
}
|
||
|
if (outputFileName) {
|
||
|
writeToFile(outputFileName, output);
|
||
|
} else {
|
||
|
console.log(output);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
try {
|
||
|
|
||
|
if (!fileName) {
|
||
|
readToEnd(process.stdin, function(err, data) {
|
||
|
if (err) {
|
||
|
throw err;
|
||
|
}
|
||
|
callback(data.toString());
|
||
|
});
|
||
|
} else {
|
||
|
fs.readFile(fileName, function(err, data) {
|
||
|
if (err) {
|
||
|
throw err;
|
||
|
}
|
||
|
callback(data.toString());
|
||
|
});
|
||
|
}
|
||
|
} catch (e) {
|
||
|
console.log('Seems an invalid file or stream.' + e);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function writeToFile(fileName, data) {
|
||
|
fs.writeFile(fileName, data, function(err) {
|
||
|
if (err) {
|
||
|
throw err;
|
||
|
}
|
||
|
console.log('JSON output has been written to ' + fileName);
|
||
|
});
|
||
|
}
|