Project

General

Profile

Statistics
| Revision:

root / trunk / web / dojo / dojox / xml / DomParser.js

History | View | Annotate | Download (6.72 KB)

1 9 andrej.cim
/*
2
        Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
3
        Available via Academic Free License >= 2.1 OR the modified BSD license.
4
        see: http://dojotoolkit.org/license for details
5
*/
6
7
8
if(!dojo._hasResource["dojox.xml.DomParser"]){
9
dojo._hasResource["dojox.xml.DomParser"]=true;
10
dojo.provide("dojox.xml.DomParser");
11
dojox.xml.DomParser=new (function(){
12
var _1={ELEMENT:1,ATTRIBUTE:2,TEXT:3,CDATA_SECTION:4,PROCESSING_INSTRUCTION:7,COMMENT:8,DOCUMENT:9};
13
var _2=/<([^>\/\s+]*)([^>]*)>([^<]*)/g;
14
var _3=/([^=]*)=(("([^"]*)")|('([^']*)'))/g;
15
var _4=/<!ENTITY\s+([^"]*)\s+"([^"]*)">/g;
16
var _5=/<!\[CDATA\[([\u0001-\uFFFF]*?)\]\]>/g;
17
var _6=/<!--([\u0001-\uFFFF]*?)-->/g;
18
var _7=/^\s+|\s+$/g;
19
var _8=/\s+/g;
20
var _9=/\&gt;/g;
21
var _a=/\&lt;/g;
22
var _b=/\&quot;/g;
23
var _c=/\&apos;/g;
24
var _d=/\&amp;/g;
25
var _e="_def_";
26
function _f(){
27
return new (function(){
28
var all={};
29
this.nodeType=_1.DOCUMENT;
30
this.nodeName="#document";
31
this.namespaces={};
32
this._nsPaths={};
33
this.childNodes=[];
34
this.documentElement=null;
35
this._add=function(obj){
36
if(typeof (obj.id)!="undefined"){
37
all[obj.id]=obj;
38
}
39
};
40
this._remove=function(id){
41
if(all[id]){
42
delete all[id];
43
}
44
};
45
this.byId=this.getElementById=function(id){
46
return all[id];
47
};
48
this.byName=this.getElementsByTagName=_10;
49
this.byNameNS=this.getElementsByTagNameNS=_11;
50
this.childrenByName=_12;
51
this.childrenByNameNS=_13;
52
})();
53
};
54
function _10(_14){
55
function _15(_16,_17,arr){
56
dojo.forEach(_16.childNodes,function(c){
57
if(c.nodeType==_1.ELEMENT){
58
if(_17=="*"){
59
arr.push(c);
60
}else{
61
if(c.nodeName==_17){
62
arr.push(c);
63
}
64
}
65
_15(c,_17,arr);
66
}
67
});
68
};
69
var a=[];
70
_15(this,_14,a);
71
return a;
72
};
73
function _11(_18,ns){
74
function _19(_1a,_1b,ns,arr){
75
dojo.forEach(_1a.childNodes,function(c){
76
if(c.nodeType==_1.ELEMENT){
77
if(_1b=="*"&&c.ownerDocument._nsPaths[ns]==c.namespace){
78
arr.push(c);
79
}else{
80
if(c.localName==_1b&&c.ownerDocument._nsPaths[ns]==c.namespace){
81
arr.push(c);
82
}
83
}
84
_19(c,_1b,ns,arr);
85
}
86
});
87
};
88
if(!ns){
89
ns=_e;
90
}
91
var a=[];
92
_19(this,_18,ns,a);
93
return a;
94
};
95
function _12(_1c){
96
var a=[];
97
dojo.forEach(this.childNodes,function(c){
98
if(c.nodeType==_1.ELEMENT){
99
if(_1c=="*"){
100
a.push(c);
101
}else{
102
if(c.nodeName==_1c){
103
a.push(c);
104
}
105
}
106
}
107
});
108
return a;
109
};
110
function _13(_1d,ns){
111
var a=[];
112
dojo.forEach(this.childNodes,function(c){
113
if(c.nodeType==_1.ELEMENT){
114
if(_1d=="*"&&c.ownerDocument._nsPaths[ns]==c.namespace){
115
a.push(c);
116
}else{
117
if(c.localName==_1d&&c.ownerDocument._nsPaths[ns]==c.namespace){
118
a.push(c);
119
}
120
}
121
}
122
});
123
return a;
124
};
125
function _1e(v){
126
return {nodeType:_1.TEXT,nodeName:"#text",nodeValue:v.replace(_8," ").replace(_9,">").replace(_a,"<").replace(_c,"'").replace(_b,"\"").replace(_d,"&")};
127
};
128
function _1f(_20){
129
for(var i=0;i<this.attributes.length;i++){
130
if(this.attributes[i].nodeName==_20){
131
return this.attributes[i].nodeValue;
132
}
133
}
134
return null;
135
};
136
function _21(_22,ns){
137
for(var i=0;i<this.attributes.length;i++){
138
if(this.ownerDocument._nsPaths[ns]==this.attributes[i].namespace&&this.attributes[i].localName==_22){
139
return this.attributes[i].nodeValue;
140
}
141
}
142
return null;
143
};
144
function _23(_24,val){
145
var old=null;
146
for(var i=0;i<this.attributes.length;i++){
147
if(this.attributes[i].nodeName==_24){
148
old=this.attributes[i].nodeValue;
149
this.attributes[i].nodeValue=val;
150
break;
151
}
152
}
153
if(_24=="id"){
154
if(old!=null){
155
this.ownerDocument._remove(old);
156
}
157
this.ownerDocument._add(this);
158
}
159
};
160
function _25(_26,val,ns){
161
for(var i=0;i<this.attributes.length;i++){
162
if(this.ownerDocument._nsPaths[ns]==this.attributes[i].namespace&&this.attributes[i].localName==_26){
163
this.attributes[i].nodeValue=val;
164
return;
165
}
166
}
167
};
168
function _27(){
169
var p=this.parentNode;
170
if(p){
171
for(var i=0;i<p.childNodes.length;i++){
172
if(p.childNodes[i]==this&&i>0){
173
return p.childNodes[i-1];
174
}
175
}
176
}
177
return null;
178
};
179
function _28(){
180
var p=this.parentNode;
181
if(p){
182
for(var i=0;i<p.childNodes.length;i++){
183
if(p.childNodes[i]==this&&(i+1)<p.childNodes.length){
184
return p.childNodes[i+1];
185
}
186
}
187
}
188
return null;
189
};
190
this.parse=function(str){
191
var _29=_f();
192
if(str==null){
193
return _29;
194
}
195
if(str.length==0){
196
return _29;
197
}
198
if(str.indexOf("<!ENTITY")>0){
199
var _2a,eRe=[];
200
if(_4.test(str)){
201
_4.lastIndex=0;
202
while((_2a=_4.exec(str))!=null){
203
eRe.push({entity:"&"+_2a[1].replace(_7,"")+";",expression:_2a[2]});
204
}
205
for(var i=0;i<eRe.length;i++){
206
str=str.replace(new RegExp(eRe[i].entity,"g"),eRe[i].expression);
207
}
208
}
209
}
210
var _2b=[],_2c;
211
while((_2c=_5.exec(str))!=null){
212
_2b.push(_2c[1]);
213
}
214
for(var i=0;i<_2b.length;i++){
215
str=str.replace(_2b[i],i);
216
}
217
var _2d=[],_2e;
218
while((_2e=_6.exec(str))!=null){
219
_2d.push(_2e[1]);
220
}
221
for(i=0;i<_2d.length;i++){
222
str=str.replace(_2d[i],i);
223
}
224
var res,obj=_29;
225
while((res=_2.exec(str))!=null){
226
if(res[2].charAt(0)=="/"&&res[2].replace(_7,"").length>1){
227
if(obj.parentNode){
228
obj=obj.parentNode;
229
}
230
var _2f=(res[3]||"").replace(_7,"");
231
if(_2f.length>0){
232
obj.childNodes.push(_1e(_2f));
233
}
234
}else{
235
if(res[1].length>0){
236
if(res[1].charAt(0)=="?"){
237
var _30=res[1].substr(1);
238
var _31=res[2].substr(0,res[2].length-2);
239
obj.childNodes.push({nodeType:_1.PROCESSING_INSTRUCTION,nodeName:_30,nodeValue:_31});
240
}else{
241
if(res[1].charAt(0)=="!"){
242
if(res[1].indexOf("![CDATA[")==0){
243
var val=parseInt(res[1].replace("![CDATA[","").replace("]]",""));
244
obj.childNodes.push({nodeType:_1.CDATA_SECTION,nodeName:"#cdata-section",nodeValue:_2b[val]});
245
}else{
246
if(res[1].substr(0,3)=="!--"){
247
var val=parseInt(res[1].replace("!--","").replace("--",""));
248
obj.childNodes.push({nodeType:_1.COMMENT,nodeName:"#comment",nodeValue:_2d[val]});
249
}
250
}
251
}else{
252
var _30=res[1].replace(_7,"");
253
var o={nodeType:_1.ELEMENT,nodeName:_30,localName:_30,namespace:_e,ownerDocument:_29,attributes:[],parentNode:null,childNodes:[]};
254
if(_30.indexOf(":")>-1){
255
var t=_30.split(":");
256
o.namespace=t[0];
257
o.localName=t[1];
258
}
259
o.byName=o.getElementsByTagName=_10;
260
o.byNameNS=o.getElementsByTagNameNS=_11;
261
o.childrenByName=_12;
262
o.childrenByNameNS=_13;
263
o.getAttribute=_1f;
264
o.getAttributeNS=_21;
265
o.setAttribute=_23;
266
o.setAttributeNS=_25;
267
o.previous=o.previousSibling=_27;
268
o.next=o.nextSibling=_28;
269
var _32;
270
while((_32=_3.exec(res[2]))!=null){
271
if(_32.length>0){
272
var _30=_32[1].replace(_7,"");
273
var val=(_32[4]||_32[6]||"").replace(_8," ").replace(_9,">").replace(_a,"<").replace(_c,"'").replace(_b,"\"").replace(_d,"&");
274
if(_30.indexOf("xmlns")==0){
275
if(_30.indexOf(":")>0){
276
var ns=_30.split(":");
277
_29.namespaces[ns[1]]=val;
278
_29._nsPaths[val]=ns[1];
279
}else{
280
_29.namespaces[_e]=val;
281
_29._nsPaths[val]=_e;
282
}
283
}else{
284
var ln=_30;
285
var ns=_e;
286
if(_30.indexOf(":")>0){
287
var t=_30.split(":");
288
ln=t[1];
289
ns=t[0];
290
}
291
o.attributes.push({nodeType:_1.ATTRIBUTE,nodeName:_30,localName:ln,namespace:ns,nodeValue:val});
292
if(ln=="id"){
293
o.id=val;
294
}
295
}
296
}
297
}
298
_29._add(o);
299
if(obj){
300
obj.childNodes.push(o);
301
o.parentNode=obj;
302
if(res[2].charAt(res[2].length-1)!="/"){
303
obj=o;
304
}
305
}
306
var _2f=res[3];
307
if(_2f.length>0){
308
obj.childNodes.push(_1e(_2f));
309
}
310
}
311
}
312
}
313
}
314
}
315
for(var i=0;i<_29.childNodes.length;i++){
316
var e=_29.childNodes[i];
317
if(e.nodeType==_1.ELEMENT){
318
_29.documentElement=e;
319
break;
320
}
321
}
322
return _29;
323
};
324
})();
325
}