UNPKG

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.44 kB
function r(r){for(var t={},e=t,f="",s=[],a=!1,i=0;i<r.length;i++){if("<"===r[i]){if("/"===r[i+1]){if(e=e.__parent,a)if(e[f]instanceof Array){var n=e[f].length-1;e[f][n]["#text"]="";for(var o=0;o<s.length;o++){var l=s[o];e[f][n]["#text"]+=r.slice(l[0],l[1])}}else{e[f]["#text"]="";for(var h=0;h<s.length;h++){l=s[h];e[f]["#text"]+=r.slice(l[0],l[1])}}for(;">"!==r[i];)i++;f=""}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;s.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 _=!1,g=[];">"!==r[i];)if(" "!==r[++i]&&"\n"!==r[i]&&">"!==r[i]&&"/"!==r[i]){for(var u,x=i;"="!==r[i];)i++;u=i;for(var A=i+=2;'"'!==r[i]||"\\"===r[i-1];)i++;g.push([x,u,A,i])}if("/"===r[i-1]&&(_=!0),e[p]){e[p]instanceof Array||(e[p]=[e[p]]);var W={};e[p].push(W),W.__parent=e,_||(e=W,f=p)}else e[p]={},e[p].__parent=e,_||(e=e[p],f=p);if(g.length){_&&(e=e[p]instanceof Array?e[p][e[p].length-1]:e[p]),e.$attrs={};for(var y=0;y<g.length;y++)e.$attrs[r.slice(g[y][0],g[y][1])]=r.slice(g[y][2],g[y][3]);_&&(e=e.__parent)}}a=!1,s=[]}else if(f){for(v=i;"<"!==r[i];)a||" "===r[i]||"\n"===r[i]||(a=!0),i++;c=i;i--,s.push([v,c])}}return t}export{r as xmlToJson};