rapid-xml-to-json
Version:
Fast, dependency-free XML-parser for parsing XML structures into JSON. Optimised for speed and low memory usage.
2 lines (1 loc) • 1.45 kB
JavaScript
;exports.xmlToJson=function(r){for(var t={},e=t,s="",f=[],a=!1,i=0;i<r.length;i++){if("<"===r[i]){if("/"===r[i+1]){if(e=e.__parent,a)if(e[s]instanceof Array){var n=e[s].length-1;e[s][n]["#text"]="";for(var o=0;o<f.length;o++){var l=f[o];e[s][n]["#text"]+=r.slice(l[0],l[1])}}else{e[s]["#text"]="";for(var h=0;h<f.length;h++){l=f[h];e[s]["#text"]+=r.slice(l[0],l[1])}}for(;">"!==r[i];)i++;s=""}else if("?"===r[i+1]||"!"===r[i+1])if("!"===r[i+1]){if(r.startsWith("<!DOCTYPE",i))for(i+=9;">"!==r[i];)i++;else if(r.startsWith("\x3c!--",i)){for(i+=4;!r.startsWith("--\x3e",i);)i++;i+=2}else if(r.startsWith("<![CDATA[",i)){for(var v=i+=9;!r.startsWith("]]>",i);)i++;var c=i;f.push([v,c]),i+=2,a=!0;continue}}else for(;">"!==r[i];)i++;else{i++;for(var p="";" "!==r[i]&&">"!==r[i]&&"/"!==r[i];)p+=r[i],i++;for(var u=!1,x=[];">"!==r[i];)if(" "!==r[++i]&&"\n"!==r[i]&&">"!==r[i]&&"/"!==r[i]){for(var _,g=i;"="!==r[i];)i++;_=i;for(var A=i+=2;'"'!==r[i]||"\\"===r[i-1];)i++;x.push([g,_,A,i])}if("/"===r[i-1]&&(u=!0),e[p]){e[p]instanceof Array||(e[p]=[e[p]]);var W={};e[p].push(W),W.__parent=e,u||(e=W,s=p)}else e[p]={},e[p].__parent=e,u||(e=e[p],s=p);if(x.length){u&&(e=e[p]instanceof Array?e[p][e[p].length-1]:e[p]),e.$attrs={};for(var y=0;y<x.length;y++)e.$attrs[r.slice(x[y][0],x[y][1])]=r.slice(x[y][2],x[y][3]);u&&(e=e.__parent)}}a=!1,f=[]}else if(s){for(v=i;"<"!==r[i];)a||" "===r[i]||"\n"===r[i]||(a=!0),i++;c=i;i--,f.push([v,c])}}return t};