Get All XML Nodes

Get the list of All possible XML Nodes

by maheshBongani

HTML

<div id="banner-message">
  <p id="textDisplay">Hello World</p>

</div>

JavaScript

function getAllXMLNodes() {
  var allNodes = [];
  var i = 0;

  function getPaths($node, parentPath) {
    var node = getNode(i++, $node.nodeName);
    //allNodes.push(node);

    parentPath += $node.nodeName + '/';
    debugger;
    //arr.push(parentPath);
    if ($node.children) {
      for (let i = 0; i < $node.children.length; i++) {

        let childNode = getPaths(getNodeAsXMLObject($node.children[i]), parentPath);
        node.subs.push(childNode);

      }
    }
    return node;
  }

  function getNodeAsXMLObject(text) {
    var parser, xmlDoc;
    parser = new DOMParser();
    xmlDoc = parser.parseFromString(text, "text/xml");
console.log(xmlDoc);
    return xmlDoc;
  }

  function getNode(id, title) {
    return {
      id: id,
      title: title,
      subs: []
    };
  }

  var xml = "<Root><section><type>some data</type><name>some data</name><definition>some data</definition><property><definition>some data</definition><value><definition>some data</definition></value></property></section><definition>some data</definition></Root>";
  var paths = getPaths(getNodeAsXMLObject(xml).children, '');
  document.getElementById('textDisplay').value = JSON.stringify(paths);

  console.log(paths);

  alert(JSON.stringify(paths));
}

getAllXMLNodes();

function getStructredXMLfromNodes() {

  /* https: //stackoverflow.com/questions/26295599/creating-dynamic-xml-tree-based-on-the-xpath-value */

  function addElementByPath(parent, path, value) {
    var node = parent;
    var parts = path.split(/\//);
    var dom = parent.ownerDocument;
    var existingNode;

    for (var i = 0; i < parts.length; i++) {
      existingNode = dom.evaluate(
        parts[i], node, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null
      ).singleNodeValue;
      if (existingNode) {
        node = existingNode;
      } else {
        node = node.appendChild(dom.createElement(parts[i]));
      }
    }
    node.appendChild(dom.createTextNode(value));
  }

  var paths = [
   ...