xunfeiAI/static/fast-xml-parser/cli.js

102 lines
3.0 KiB
JavaScript
Raw Permalink Normal View History

2023-09-12 20:19:08 +08:00
#!/usr/bin/env node
'use strict';
/*eslint-disable no-console*/
const fs = require('fs');
const path = require('path');
const parser = require('fast-xml-parser');
const readToEnd = require('fast-xml-parser/src/read').readToEnd;
if (process.argv[2] === '--help' || process.argv[2] === '-h') {
console.log('Fast XML Parser ' + require(path.join(__dirname + '/package.json')).version);
console.log('----------------');
console.log('xml2js [-ns|-a|-c|-v|-V] <filename> [-o outputfile.json]');
console.log('cat xmlfile.xml | xml2js [-ns|-a|-c|-v|-V] [-o outputfile.json]');
console.log('-ns: remove namespace from tag and atrribute name.');
console.log("-a: don't parse attributes.");
console.log('-c: parse values to premitive type.');
console.log('-v: validate before parsing.');
console.log('-V: validate only.');
} else if (process.argv[2] === '--version') {
console.log(require(path.join(__dirname + '/package.json')).version);
} else {
const options = {
ignoreNameSpace: true,
ignoreAttributes: false,
parseNodeValue: 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.ignoreNameSpace = false;
} else if (process.argv[i] === '-a') {
options.ignoreAttributes = true;
} else if (process.argv[i] === '-c') {
options.parseNodeValue = 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 result = parser.validate(xmlData);
if (result === true) {
output = JSON.stringify(parser.parse(xmlData, options), null, 4);
} else {
output = result;
}
} else if (validateOnly) {
output = parser.validate(xmlData);
process.exitCode = output === true ? 0 : 1;
} else {
output = JSON.stringify(parser.parse(xmlData, options), 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);
});
}