JSFiddle - React, Tailwind, and code Playground

by ajai jothi

HTML

<label for="">
  Paste your XML Here
  <textarea id="xml"></textarea>
  <input type="button" id="processXML" value="Process">
</label>

<pre id="output"></pre>

CSS

textarea {
    width: 100%;
    height: 200px;
  }
  
  pre {
    border: 1px solid #ddd;
    background: #fff;
    padding: 10px;
  }
  
  pre:before {
    content: 'OUTPUT:';
    display: block;
    font-weight: bold;
    padding-bottom: 5px;
  }

JavaScript

function TX103(xml) {
  var _parsers = [],
    _stringReplacer = [],
    self = this,
    _xml = xml || null;

  this.setXML = function(xml) {
    if (typeof xml === 'string') {
      var domParser = new DOMParser();
      _xml = domParser.parseFromString(xml, "text/xml");
    }

    return this;
  };

  this.getXML = function() {
    return xml;
  };

  this.addParser = function(parser) {
    if (parser instanceof Array) {
      _parsers = _parsers.concat(parser);
    } else {
      _parsers.push(parser);
    }

    return this;
  };

  this.findAndReplace = function(find, replace) {
    _stringReplacer.push({
      find: find,
      replace: replace
    });

    return this;
  };

  this.execute = function() {
    _parsers.forEach(function(parser) {
      parser(_xml);
    });
    return this;
  }

  this.toXML = function() {
    var domParser = new DOMParser();
    _xml = domParser.parseFromString(self.toString(), "text/xml");
    return _xml;
  };

  this.toString = function() {
    var xmlStr = (new XMLSerializer()).serializeToString(_xml);
    _stringReplacer.forEach(function(sp) {
      xmlStr.replace(sp.find, sp.replace);
    });

    return xmlStr;
  };

  this.setXML(xml);
}

function createChild(xmlNode, tag, node, attr) {
  var elm = xmlNode.createElement(tag);
  attr = attr || {};
  var _node = node;
  if (typeof node === 'string') {
    _node = xmlNode.createTextNode(node);
  }
  for (var a in attr) {
    elm.setAttribute(a, attr[a]);
  }
  _node && elm.appendChild(_node);
  return elm;
}

function insertPolicyNumber(xml) {
  var pn = createChild(xml, 'PolNumber', '2342');

  var lob = xml.querySelectorAll('Policy LineOfBusiness')[0];
  lob.parentNode.insertBefore(pn, lob);
}

function insertSignatureInfo(xml) {
  var signatureInfo = createChild(xml, 'SignatureInfo'),

    signatureDate = createChild(xml, 'SignatureDate', JSON.stringify(new Date()).slice(1, 11)),
    signatureState = createChild(xml, 'SignatureState', 'IL - Illinois', {
      tc:...