Skip to content

Instantly share code, notes, and snippets.

@erickoledadevrel
Created December 1, 2014 14:30
Show Gist options
  • Save erickoledadevrel/6b1e9e2796e3c21f669f to your computer and use it in GitHub Desktop.
Save erickoledadevrel/6b1e9e2796e3c21f669f to your computer and use it in GitHub Desktop.

Revisions

  1. Eric Koleda created this gist Dec 1, 2014.
    45 changes: 45 additions & 0 deletions xmlToJson.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,45 @@
    /**
    * Converts an XML string to a JSON object, using logic similar to the
    * sunset method Xml.parse().
    * @param {string} xml The XML to parse.
    * @returns {Object} The parsed XML.
    */
    function xmlToJson(xml) {
    var doc = XmlService.parse(xml);
    var result = {};
    var root = doc.getRootElement();
    result[root.getName()] = elementToJson(root);
    return result;
    }

    /**
    * Converts an XmlService element to a JSON object, using logic similar to
    * the sunset method Xml.parse().
    * @param {XmlService.Element} element The element to parse.
    * @returns {Object} The parsed element.
    */
    function elementToJson(element) {
    var result = {};
    // Attributes.
    element.getAttributes().forEach(function(attribute) {
    result[attribute.getName()] = attribute.getValue();
    });
    // Child elements.
    element.getChildren().forEach(function(child) {
    var key = child.getName();
    var value = elementToJson(child);
    if (result[key]) {
    if (!(result[key] instanceof Array)) {
    result[key] = [result[key]];
    }
    result[key].push(value);
    } else {
    result[key] = value;
    }
    });
    // Text content.
    if (element.getText()) {
    result['Text'] = element.getText();
    }
    return result;
    }