现在的位置: 首页 > 综合 > 正文

纯js解析xml字符串到js object

2013年09月03日 ⁄ 综合 ⁄ 共 1987字 ⁄ 字号 评论关闭

不用xml dom,测试兼容IE Chrome Firefox Opera

var XML = {
	toObject : function(xmlstring){
		var reg=/<([^> ]+)((?:\s*\w+\s*=\s*(?:'[^']*'|"[^"]*"))*?)\s*(?:>(.*?)<\/\1>|\/>)/g, 
			areg = /(\w+)\s*=\s*(?:'([^']*)'|"([^"]*)")/g, 
		getUnit = function(s){
			var us, u, t = {}, tmp, a;
			reg.lastIndex = 0;
			if(reg.test(s)) {
				reg.lastIndex = 0;
				us = s.match(reg);
				for(var i = 0, il = us.length; i < il; i++){
					reg.lastIndex = 0;
					u = reg.exec(us[i]);
					if(t[u[1]] != undefined){t[u[1]] = [t[u[1]]]; t[u[1]].push(getUnit(u[3]))}
					else t[u[1]] = getUnit(u[3]);
					areg.lastIndex = 0;
					if(areg.test(u[2])){
						areg.lastIndex = 0;
						a = u[2].match(areg);
						if(t[u[1]] instanceof Array) {
							tmp = t[u[1]][t[u[1]].length-1];
							tmp = t[u[1]][t[u[1]].length-1] = tmp || {};
						}
						else {
							tmp = t[u[1]] = t[u[1]] || {};
						}
						tmp = tmp.__ATTRIBUTES = {};
						for(var j = 0, jl = a.length; j < jl; j++){
							areg.lastIndex = 0;
							u = areg.exec(a[j]);
							tmp[u[1]] = u[2] || u[3];
						}
					}
				}
				try{return t}catch(ex){}finally{t = us = u = tmp = a = null}
			}
			else return s;
		};
		try{return getUnit(xmlstring)}catch(ex){}finally{reg = getUnit = null}
	}
}

用法实例:

var x = XML.toObject(
'<NewInfo  a = "113" b ="xy">' +
	'<News  > ' +
		'<Title>今天要下雨</Title> 	 <Content>今天确实下雨了</Content><Date>2009-02-04</Date>' +
	'</News>' +
	'<News>' +
		'<Title>今天出太阳</Title><Content>今天确实出太阳了</Content> 	<Date>2009-02-03</Date>' +
	'</News>' +
'</NewInfo>'
);
//得到一个对象,内容为:
x = {
	"NewInfo":{
		"News":[
			{"Title":"今天要下雨","Content":"今天确实下雨了","Date":"2009-02-04"},
			{"Title":"今天出太阳","Content":"今天确实出太阳了","Date":"2009-02-03"}
		],
		"__ATTRIBUTES":{"a":"113","b":"xy"}
	}
};

x = XML.toObject(
'<markers>' +
	'<marker ' +
		'carId="1" carName="SHANGHAI" gpsTime="2011-08-26 21:21:11.0" ' +
		'lat="31.230393" lng="121.473704" direction="222" speed="22" ' +
	'/>' +
	'<marker ' +
		'carId="7" carName="XIAMEN" gpsTime="2011-08-26 21:21:11.0" ' +
		'lat="24.479836" lng="118.089421" direction="222" speed="22" ' +
	'/>' +
'</markers>'
);
//对象为:
x = {
	"markers":{
		"marker":[
			{
				"__ATTRIBUTES":{
					"carId":"1","carName":"SHANGHAI","gpsTime":"2011-08-26 21:21:11.0",
					"lat":"31.230393","lng":"121.473704","direction":"222","speed":"22"
				}
			},
			{
				"__ATTRIBUTES":{
					"carId":"7","carName":"XIAMEN","gpsTime":"2011-08-26 21:21:11.0",
					"lat":"24.479836","lng":"118.089421","direction":"222","speed":"22"
				}
			}
		]
	}
}

抱歉!评论已关闭.