3 copyright 2005-2007 Thomas Frank
\r
5 This program is free software under the terms of the
\r
6 GNU General Public License version 2 as published by the Free
\r
7 Software Foundation. It is distributed without any warranty.
\r
11 parser:function(xmlcode,ignoretags,debug){
\r
12 if(!ignoretags){ignoretags=""};
\r
13 xmlcode=xmlcode.replace(/\s*\/>/g,'/>');
\r
14 xmlcode=xmlcode.replace(/<\?[^>]*>/g,"").replace(/<\![^>]*>/g,"");
\r
15 if (!ignoretags.sort){ignoretags=ignoretags.split(",")};
\r
16 var x=this.no_fast_endings(xmlcode);
\r
17 x=this.attris_to_tags(x);
\r
19 x=x.split("%3C").join("<").split("%3E").join(">").split("%3D").join("=").split("%22").join("\"");
\r
20 for (var i=0;i<ignoretags.length;i++){
\r
21 x=x.replace(new RegExp("<"+ignoretags[i]+">","g"),"*$**"+ignoretags[i]+"**$*");
\r
22 x=x.replace(new RegExp("</"+ignoretags[i]+">","g"),"*$***"+ignoretags[i]+"**$*")
\r
24 x='<JSONTAGWRAPPER>'+x+'</JSONTAGWRAPPER>';
\r
26 var y=this.xml_to_object(x).jsontagwrapper;
\r
27 if(debug){y=this.show_json_structure(y,debug)};
\r
30 xml_to_object:function(xmlcode){
\r
31 var x=xmlcode.replace(/<\//g,"§");
\r
36 for (var i=1;i<x.length;i++){
\r
37 var tagname=x[i].split(">")[0];
\r
38 opentags.push(tagname);
\r
40 y.push(level+"<"+x[i].split("§")[0]);
\r
41 while(x[i].indexOf("§"+opentags[opentags.length-1]+">")>=0){level--;opentags.pop()}
\r
44 var objname="this.xmlobject";
\r
45 for (var i=0;i<y.length;i++){
\r
47 var niva=y[i].split("<")[0];
\r
48 var tagnamn=y[i].split("<")[1].split(">")[0];
\r
49 tagnamn=tagnamn.toLowerCase();
\r
50 var rest=y[i].split(">")[1];
\r
52 var tabort=oldniva-niva+1;
\r
53 for (var j=0;j<tabort;j++){objname=objname.substring(0,objname.lastIndexOf("."))}
\r
55 objname+="."+tagnamn;
\r
56 var pobject=objname.substring(0,objname.lastIndexOf("."));
\r
57 if (eval("typeof "+pobject) != "object"){preeval+=pobject+"={value:"+pobject+"};\n"};
\r
58 var objlast=objname.substring(objname.lastIndexOf(".")+1);
\r
60 for (k in eval(pobject)){if(k==objlast){already=true}};
\r
61 var onlywhites=true;
\r
62 for(var s=0;s<rest.length;s+=3){
\r
63 if(rest.charAt(s)!="%"){onlywhites=false}
\r
65 if (rest!="" && !onlywhites){
\r
67 rest="'"+rest.replace(/\'/g,"\\'")+"'";
\r
68 rest=rest.replace(/\*\$\*\*\*/g,"</");
\r
69 rest=rest.replace(/\*\$\*\*/g,"<");
\r
70 rest=rest.replace(/\*\*\$\*/g,">")
\r
74 if(rest.charAt(0)=="'"){rest='unescape('+rest+')'};
\r
75 if (already && !eval(objname+".sort")){preeval+=objname+"=["+objname+"];\n"};
\r
76 var before="=";after="";
\r
77 if (already){before=".push(";after=")"};
\r
78 var toeval=preeval+objname+before+rest+after;
\r
80 if(eval(objname+".sort")){objname+="["+eval(objname+".length-1")+"]"};
\r
83 return this.xmlobject
\r
85 show_json_structure:function(obj,debug,l){
\r
87 if (obj.sort){x+="[\n"} else {x+="{\n"};
\r
89 if (!obj.sort){x+=i+":"};
\r
90 if (typeof obj[i] == "object"){
\r
91 x+=this.show_json_structure(obj[i],false,1)
\r
94 if(typeof obj[i]=="function"){
\r
96 //v=v.replace(/\t/g,"");
\r
99 else if(typeof obj[i]!="string"){x+=obj[i]+",\n"}
\r
100 else {x+="'"+obj[i].replace(/\'/g,"\\'").replace(/\n/g,"\\n").replace(/\t/g,"\\t").replace(/\r/g,"\\r")+"',\n"}
\r
103 if (obj.sort){x+="],\n"} else {x+="},\n"};
\r
105 x=x.substring(0,x.lastIndexOf(","));
\r
106 x=x.replace(new RegExp(",\n}","g"),"\n}");
\r
107 x=x.replace(new RegExp(",\n]","g"),"\n]");
\r
108 var y=x.split("\n");x="";
\r
110 for (var i=0;i<y.length;i++){
\r
111 if(y[i].indexOf("}")>=0 || y[i].indexOf("]")>=0){lvl--};
\r
112 tabs="";for(var j=0;j<lvl;j++){tabs+="\t"};
\r
114 if(y[i].indexOf("{")>=0 || y[i].indexOf("[")>=0){lvl++}
\r
117 x=x.replace(/</g,"<").replace(/>/g,">");
\r
118 x=x.replace(/\n/g,"<BR>").replace(/\t/g," ")
\r
120 if (debug=="compact"){x=x.replace(/\n/g,"").replace(/\t/g,"")}
\r
124 no_fast_endings:function(x){
\r
126 for (var i=1;i<x.length;i++){
\r
127 var t=x[i-1].substring(x[i-1].lastIndexOf("<")+1).split(" ")[0];
\r
128 x[i]="></"+t+">"+x[i]
\r
133 attris_to_tags: function(x){
\r
134 var d=' ="\''.split("");
\r
136 for (var i=0;i<x.length;i++){
\r
137 var temp=x[i].split("<");
\r
138 for (var r=0;r<4;r++){temp[0]=temp[0].replace(new RegExp(d[r],"g"),"_jsonconvtemp"+r+"_")};
\r
140 temp[1]=temp[1].replace(/'/g,'"');
\r
141 temp[1]=temp[1].split('"');
\r
142 for (var j=1;j<temp[1].length;j+=2){
\r
143 for (var r=0;r<4;r++){temp[1][j]=temp[1][j].replace(new RegExp(d[r],"g"),"_jsonconvtemp"+r+"_")}
\r
145 temp[1]=temp[1].join('"')
\r
147 x[i]=temp.join("<")
\r
150 x=x.replace(/ ([^=]*)=([^ |>]*)/g,"><$1>$2</$1");
\r
151 x=x.replace(/>"/g,">").replace(/"</g,"<");
\r
152 for (var r=0;r<4;r++){x=x.replace(new RegExp("_jsonconvtemp"+r+"_","g"),d[r])} ;
\r
158 if(!Array.prototype.push){
\r
159 Array.prototype.push=function(x){
\r
160 this[this.length]=x;
\r
165 if (!Array.prototype.pop){
\r
166 Array.prototype.pop=function(){
\r
167 var response = this[this.length-1];
\r