不用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" } } ] } }