Last active
August 29, 2015 14:17
-
-
Save cneud/d815c26b7fb870cc3ace to your computer and use it in GitHub Desktop.
XML to JSON converter function
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Converts XML to JSON | |
// from: http://coursesweb.net/javascript/convert-xml-json-javascript_s2 | |
function XMLtoJSON() { | |
var me = this; // stores the object instance | |
// gets the content of an XML file and returns it in | |
me.fromFile = function(xml, rstr) { | |
// Creates an instance of a XMLHttpRequest object | |
var xhttp = (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"); | |
// sets and sends the request for calling "xml" | |
xhttp.open("GET", xml ,false); | |
xhttp.send(null); | |
// gets the JSON string | |
var json_str = jsontoStr(setJsonObj(xhttp.responseXML)); | |
// sets and returns the JSON object, if "rstr" undefined (not passed), else, returns JSON string | |
return (typeof(rstr) == 'undefined') ? JSON.parse(json_str) : json_str; | |
} | |
// returns XML DOM from string with XML content | |
me.fromStr = function(xml, rstr) { | |
// for non IE browsers | |
if(window.DOMParser) { | |
var getxml = new DOMParser(); | |
var xmlDoc = getxml.parseFromString(xml,"text/xml"); | |
} | |
else { | |
// for Internet Explorer | |
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); | |
xmlDoc.async = "false"; | |
} | |
// gets the JSON string | |
var json_str = jsontoStr(setJsonObj(xmlDoc)); | |
// sets and returns the JSON object, if "rstr" undefined (not passed), else, returns JSON string | |
return (typeof(rstr) == 'undefined') ? JSON.parse(json_str) : json_str; | |
} | |
// receives XML DOM object, returns converted JSON object | |
var setJsonObj = function(xml) { | |
var js_obj = {}; | |
if (xml.nodeType == 1) { | |
if (xml.attributes.length > 0) { | |
js_obj["@attributes"] = {}; | |
for (var j = 0; j < xml.attributes.length; j++) { | |
var attribute = xml.attributes.item(j); | |
js_obj["@attributes"][attribute.nodeName] = attribute.value; | |
} | |
} | |
} else if (xml.nodeType == 3) { | |
js_obj = xml.nodeValue; | |
} | |
if (xml.hasChildNodes()) { | |
for (var i = 0; i < xml.childNodes.length; i++) { | |
var item = xml.childNodes.item(i); | |
var nodeName = item.nodeName; | |
if (typeof(js_obj[nodeName]) == "undefined") { | |
js_obj[nodeName] = setJsonObj(item); | |
} else { | |
if (typeof(js_obj[nodeName].push) == "undefined") { | |
var old = js_obj[nodeName]; | |
js_obj[nodeName] = []; | |
js_obj[nodeName].push(old); | |
} | |
js_obj[nodeName].push(setJsonObj(item)); | |
} | |
} | |
} | |
return js_obj; | |
} | |
// converts JSON object to string (human readable). | |
// Removes '\t\r\n', rows with multiples '""', multiple empty rows, ' "",', and " ",; replace empty [] with "" | |
var jsontoStr = function(js_obj) { | |
var rejsn = JSON.stringify(js_obj, undefined, 2).replace(/(\\t|\\r|\\n)/g, '').replace(/"",[\n\t\r\s]+""[,]*/g, '').replace(/(\n[\t\s\r]*\n)/g, '').replace(/[\s\t]{2,}""[,]{0,1}/g, '').replace(/"[\s\t]{1,}"[,]{0,1}/g, '').replace(/\[[\t\s]*\]/g, '""'); | |
return (rejsn.indexOf('"parsererror": {') == -1) ? rejsn : 'Invalid XML format'; | |
} | |
}; | |
// creates object instance of XMLtoJSON | |
var xml2json = new XMLtoJSON(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment