Last active
August 29, 2015 14:00
-
-
Save ermand/11154393 to your computer and use it in GitHub Desktop.
Convert XML to JSON with JavaScript
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
/* | |
The JavaScript | |
It's important to point out that Titanium's Titanium.XML.DOMDocument object implements DOM2-level structures. Here's the magic XML to JSON code: | |
*/ | |
// Changes XML to JSON | |
function xmlToJson(xml) { | |
// Create the return object | |
var obj = {}; | |
if (xml.nodeType == 1) { // element | |
// do attributes | |
if (xml.attributes.length > 0) { | |
obj["@attributes"] = {}; | |
for (var j = 0; j < xml.attributes.length; j++) { | |
var attribute = xml.attributes.item(j); | |
obj["@attributes"][attribute.nodeName] = attribute.nodeValue; | |
} | |
} | |
} else if (xml.nodeType == 3) { // text | |
obj = xml.nodeValue; | |
} | |
// do children | |
if (xml.hasChildNodes()) { | |
for(var i = 0; i < xml.childNodes.length; i++) { | |
var item = xml.childNodes.item(i); | |
var nodeName = item.nodeName; | |
if (typeof(obj[nodeName]) == "undefined") { | |
obj[nodeName] = xmlToJson(item); | |
} else { | |
if (typeof(obj[nodeName].push) == "undefined") { | |
var old = obj[nodeName]; | |
obj[nodeName] = []; | |
obj[nodeName].push(old); | |
} | |
obj[nodeName].push(xmlToJson(item)); | |
} | |
} | |
} | |
return obj; | |
}; | |
/* | |
With this function, XML that looks like: | |
<ALEXA VER="0.9" URL="davidwalsh.name/" HOME="0" AID="="> | |
<SD TITLE="A" FLAGS="" HOST="davidwalsh.name"> | |
<TITLE TEXT="David Walsh Blog :: PHP, MySQL, CSS, Javascript, MooTools, and Everything Else"/> | |
<LINKSIN NUM="1102"/> | |
<SPEED TEXT="1421" PCT="51"/> | |
</SD> | |
<SD> | |
<POPULARITY URL="davidwalsh.name/" TEXT="7131"/> | |
<REACH RANK="5952"/> | |
<RANK DELTA="-1648"/> | |
</SD> | |
</ALEXA> | |
...becomes workable a JavaScript object with the following structure: | |
{ | |
"@attributes": { | |
AID: "=", | |
HOME: 0, | |
URL: "davidwalsh.name/", | |
VER: "0.9", | |
}, | |
SD = [ | |
{ | |
"@attributes": { | |
FLAGS: "", | |
HOST: "davidwalsh.name", | |
TITLE: A | |
}, | |
LINKSIN: { | |
"@attributes": { | |
NUM: 1102 | |
} | |
}, | |
SPEED: { | |
"@attributes": { | |
PCT: 51, | |
TEXT: 1421 | |
} | |
}, | |
TITLE: { | |
"@attributes": { | |
TEXT: "David Walsh Blog :: PHP, MySQL, CSS, Javascript, MooTools, and Everything Else", | |
} | |
}, | |
}, | |
{ | |
POPULARITY: { | |
"@attributes": { | |
TEXT: 7131, | |
URL: "davidwalsh.name/" | |
} | |
}, | |
RANK: { | |
"@attributes": { | |
DELTA: "-1648" | |
} | |
}, | |
REACH: { | |
"@attributes": { | |
RANK = 5952 | |
} | |
} | |
} | |
] | |
} | |
From here you can use the JavaScript object however you see fit. If you'd like the JavaScript in string JSON format, you can code: | |
// Assuming xmlDoc is the XML DOM Document | |
var jsonText = JSON.stringify(xmlToJson(xmlDoc)); | |
This function has been extremely useful in allowing me to quickly disregard XML and use JSON instead. The function works well when structuring attributes and arrays of nested child nodes. Keep this handy; at some point you may need to convert XML to JSON! | |
*/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment