Skip to content

Instantly share code, notes, and snippets.

@therealklanni
Created November 29, 2011 23:57
Show Gist options
  • Save therealklanni/1407243 to your computer and use it in GitHub Desktop.
Save therealklanni/1407243 to your computer and use it in GitHub Desktop.
A simple JSON to XML converter with namespace support.
json2xml = function(o, ns, tab) {
if (!Array.prototype.j) Array.prototype.j = function (a) { return this.join(a||"") };
var ns = ns+":"||"", m, xml = '',
toXml = function(v, name, ind) {
var i, n, m, s, hasChild, xml = "";
if (v instanceof Array) {
for (i = 0, n = v.length; i < n; i++) {
xml += [ind,toXml(v[i], name, ind + '\t'),'\n'].j();
}
} else if (typeof(v) === "object") {
hasChild = false;
xml += [ind,'<',ns,name].j();
for (m in v) {
if (m.charAt(0) === "@") {
s = (v[m]) ? v[m].toString() : "";
xml += [' ',m.substr(1),'="',s,'"'].j();
} else {
hasChild = true;
}
}
xml += hasChild ? '>' : ' />';
if (hasChild) {
for (m in v) {
if (m === "#text") {
xml += v[m];
} else if (m === "#cdata") {
xml += ['<![CDATA[',v[m],']]>'].j();
} else if (m.charAt(0) !== "@") {
xml += toXml(v[m], m, ind + '\t');
}
}
xml += [(xml.charAt(xml.length - 1) === '\n' ? ind : ''),'</',ns,name,'>'].j();
}
} else {
if (v === undefined || v === null) { console.warn("xml2json",name||"!name",ind||"!ind",xml||"!xml",v); }
v = v === undefined ? "" : v;
xml += [ind,'<',ns,name,'>',v.toString(),'</',ns,name,'>'].j();
}
return xml;
};
for (m in o) {
xml += toXml(o[m], m, '');
}
return tab ? xml.replace(/\t/g, tab) : xml.replace(/\t|\n/g, '');
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment