fxparser 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #!/usr/bin/env node
  2. 'use strict';
  3. /*eslint-disable no-console*/
  4. const fs = require('fs');
  5. const path = require('path');
  6. const {XMLParser, XMLValidator} = require("../fxp");
  7. const readToEnd = require('./read').readToEnd;
  8. const version = require('./../../package.json').version;
  9. if (process.argv[2] === '--help' || process.argv[2] === '-h') {
  10. console.log(require("./man"));
  11. } else if (process.argv[2] === '--version') {
  12. console.log(version);
  13. } else {
  14. const options = {
  15. removeNSPrefix: true,
  16. ignoreAttributes: false,
  17. parseTagValue: true,
  18. parseAttributeValue: true,
  19. };
  20. let fileName = '';
  21. let outputFileName;
  22. let validate = false;
  23. let validateOnly = false;
  24. for (let i = 2; i < process.argv.length; i++) {
  25. if (process.argv[i] === '-ns') {
  26. options.removeNSPrefix = false;
  27. } else if (process.argv[i] === '-a') {
  28. options.ignoreAttributes = true;
  29. } else if (process.argv[i] === '-c') {
  30. options.parseTagValue = false;
  31. options.parseAttributeValue = false;
  32. } else if (process.argv[i] === '-o') {
  33. outputFileName = process.argv[++i];
  34. } else if (process.argv[i] === '-v') {
  35. validate = true;
  36. } else if (process.argv[i] === '-V') {
  37. validateOnly = true;
  38. } else {
  39. //filename
  40. fileName = process.argv[i];
  41. }
  42. }
  43. const callback = function(xmlData) {
  44. let output = '';
  45. if (validate) {
  46. const parser = new XMLParser(options);
  47. output = parser.parse(xmlData,validate);
  48. } else if (validateOnly) {
  49. output = XMLValidator.validate(xmlData);
  50. process.exitCode = output === true ? 0 : 1;
  51. } else {
  52. const parser = new XMLParser(options);
  53. output = JSON.stringify(parser.parse(xmlData,validate), null, 4);
  54. }
  55. if (outputFileName) {
  56. writeToFile(outputFileName, output);
  57. } else {
  58. console.log(output);
  59. }
  60. };
  61. try {
  62. if (!fileName) {
  63. readToEnd(process.stdin, function(err, data) {
  64. if (err) {
  65. throw err;
  66. }
  67. callback(data.toString());
  68. });
  69. } else {
  70. fs.readFile(fileName, function(err, data) {
  71. if (err) {
  72. throw err;
  73. }
  74. callback(data.toString());
  75. });
  76. }
  77. } catch (e) {
  78. console.log('Seems an invalid file or stream.' + e);
  79. }
  80. }
  81. function writeToFile(fileName, data) {
  82. fs.writeFile(fileName, data, function(err) {
  83. if (err) {
  84. throw err;
  85. }
  86. console.log('JSON output has been written to ' + fileName);
  87. });
  88. }