1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
| function xml2json(xmlcode,ignoretags,debug){
if(!ignoretags){ignoretags=""};
xmlcode=xmlcode.replace(/\s*\/>/g,'/>');
xmlcode=xmlcode.replace(/<\?[^>]*>/g,"").replace(/<\![^>]*>/g,"");
if (!ignoretags.sort){ignoretags=ignoretags.split(",")};
var x=no_fast_endings(xmlcode);
x=attris_to_tags(x);
x=escape(x);
x=x.split("%3C").join("<").split("%3E").join(">").split("%3D").join("=").split("%22").join("\"");
for (var i=0;i<ignoretags.length;i++){
x=x.replace(new RegExp("<"+ignoretags[i]+">","g"),"*$**"+ignoretags[i]+"**$*");
x=x.replace(new RegExp("</"+ignoretags[i]+">","g"),"*$***"+ignoretags[i]+"**$*");
};
x='<JSONTAGWRAPPER>'+x+'</JSONTAGWRAPPER>';
xmlobject={};
// var y=this.xml_to_object(x).jsontagwrapper;
var y=xml_to_object(x).jsontagwrapper;
if(debug){y=show_json_structure(y,debug);}
return y;
}
function xml_to_object(xmlcode){
var x=xmlcode.replace(/<\//g,"§");
x=x.split("<");
var y=[];
var level=0;
var opentags=[];
for (var i=1;i<x.length;i++){
var tagname=x[i].split(">")[0];
opentags.push(tagname);
level++;
y.push(level+"<"+x[i].split("§")[0]);
while (x[i].indexOf("§"+opentags[opentags.length-1]+">")>=0) {level--;opentags.pop();}
};
var oldniva=-1;
var objname="xmlobject";
for (var i=0;i<y.length;i++){
var preeval="";
var niva=y[i].split("<")[0];
var tagnamn=y[i].split("<")[1].split(">")[0];
tagnamn=tagnamn.toLowerCase();
var rest=y[i].split(">")[1];
if(niva<=oldniva){
var tabort=oldniva-niva+1;
for (var j=0;j<tabort;j++){objname=objname.substring(0,objname.lastIndexOf("."));}
}
objname+="."+tagnamn;
var pobject=objname.substring(0,objname.lastIndexOf("."));
if (eval("typeof "+pobject) != "object") {preeval+=pobject+"={value:"+pobject+"};\n";}
var objlast=objname.substring(objname.lastIndexOf(".")+1);
var already=false;
for (k in eval(pobject)) {if(k==objlast) {already=true;}}
var onlywhites=true;
for (var s=0;s<rest.length;s+=3){
if (rest.charAt(s)!="%") {onlywhites=false;}
};
if (rest!="" && !onlywhites){
if (rest/1!=rest){
rest="'"+rest.replace(/\'/g,"\\'")+"'";
rest=rest.replace(/\*\$\*\*\*/g,"</");
rest=rest.replace(/\*\$\*\*/g,"<");
rest=rest.replace(/\*\*\$\*/g,">");
}
}
else {rest="{}"}
if (rest.charAt(0)=="'") {rest='unescape('+rest+')';}
if (already && !eval(objname+".sort")) {preeval+=objname+"=["+objname+"];\n";}
var before="=";after="";
if (already) {before=".push(";after=")";}
var toeval=preeval+objname+before+rest+after;
eval(toeval);
if (eval(objname+".sort")) {objname+="["+eval(objname+".length-1")+"]";}
oldniva=niva;
};
return xmlobject;
}
function show_json_structure(object,debug,l){
var x='';
if (object.sort){x+="[\n";} else {x+="{\n";};
for (var i in object){
if (!object.sort){x+=i+":"};
if (typeof object[i] == "object"){
x+=show_json_structure(object[i],false,1);
}
else {
if(typeof object[i]=="function"){
var v=object[i]+"";
//v=v.replace(/\t/g,"");
x+=v
}
else if (typeof object[i]!="string") {x+=object[i]+",\n";}
else {
x+="'"+object[i].replace(/\'/g,"\\'").replace(/\n/g,"\\n").replace(/\t/g,"\\t").replace(/\r/g,"\\r")+"',\n";
}
}
};
if (object.sort){x+="],\n"} else {x+="},\n"}
if (!l){
x=x.substring(0,x.lastIndexOf(","));
x=x.replace(new RegExp(",\n}","g"),"\n}");
x=x.replace(new RegExp(",\n]","g"),"\n]");
var y=x.split("\n");x="";
var lvl=0;
for (var i=0;i<y.length;i++){
if (y[i].indexOf("}")>=0 || y[i].indexOf("]")>=0) {lvl--;}
tabs="";for(var j=0;j<lvl;j++){tabs+="\t"};
x+=tabs+y[i]+"\n";
if (y[i].indexOf("{")>=0 || y[i].indexOf("[")>=0) {lvl++;}
};
if(debug=="html"){
x=x.replace(/</g,"<").replace(/>/g,">");
x=x.replace(/\n/g,"<BR>").replace(/\t/g," ");
};
if (debug=="compact") {x=x.replace(/\n/g,"").replace(/\t/g,"");}
};
return x;
}
function no_fast_endings(x){
x=x.split("/>");
for (var i=1;i<x.length;i++){
var t=x[i-1].substring(x[i-1].lastIndexOf("<")+1).split(" ")[0];
x[i]="></"+t+">"+x[i];
};
x=x.join("");
return x;
}
function attris_to_tags(x){
var d=' ="\''.split("");
x=x.split(">");
for (var i=0;i<x.length;i++){
var temp=x[i].split("<");
for (var r=0;r<4;r++){temp[0]=temp[0].replace(new RegExp(d[r],"g"),"_jsonconvtemp"+r+"_");};
if(temp[1]){
temp[1]=temp[1].replace(/'/g,'"');
temp[1]=temp[1].split('"');
for (var j=1;j<temp[1].length;j+=2){
for (var r=0;r<4;r++){temp[1][j]=temp[1][j].replace(new RegExp(d[r],"g"),"_jsonconvtemp"+r+"_");}
};
temp[1]=temp[1].join('"');
};
x[i]=temp.join("<");
};
x=x.join(">");
x=x.replace(/ ([^=]*)=([^ |>]*)/g,"><$1>$2</$1");
x=x.replace(/>"/g,">").replace(/"</g,"<");
for (var r=0;r<4;r++){x=x.replace(new RegExp("_jsonconvtemp"+r+"_","g"),d[r]);};
return x;
} |
Partager