解析XML的方法很多,比如数据岛,W3C DOM方法等,这里总结一下用JavaScript解析xml字符串的方法。
function loadXml(data){ //IE下加载xml字符串 if(navigator.userAgent.indexOf('MSIE') >= 0) { //加载xml字符串 (IE下的加载方式) var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); xmlDoc.async = false; //关闭异步加载,这样作可以使得文档加载完全之前,解析起不会继续执行脚本 xmlDoc.loadXML(data); } //火狐下加载xml字符串 if(isFirefox=navigator.userAgent.indexOf("Firefox")>0){ //加载xml字符串 (FireFox下的加载方式) var doc = new DOMParser(); var xmlDoc = doc.parseFromString(data, "text/xml"); } //遍历list标签 var elementList; elementList = xmlDoc.getElementsByTagName('children'); for(var i = 0; i<elementList.length; i=i+1){ var value; value = elementList[i].getAttribute('id'); var childs; //当前元素的子结点,获得所有列 childs = elementList[i].childNodes; var cellArray = new Array(); //遍历row的子节点,取得每一个结点的内容 for(var j = 0; j<childs.length; j=j+1){ var cell = $.trim($(childs[j]).text()); var cells = cellArray.push(cell); } addRow(value,cellArray); } }
在IE和在火狐下创建dom的方式不同,一般在IE下通过var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); 就行,但在火狐下需要通过var doc = new DOMParser(); var xmlDoc = doc.parseFromStrin(data,"text/xml"); 这种方式获得dom对象。
上面的方法是解析xml字符串,得到节点后遍历节点,取到值后显示,还可以直接解析xml文件。
/********************************* * 加载xml文件 */ mygrid.loadXml = function(url){ //IE下加载xml文件 if(navigator.userAgent.indexOf('MSIE') >= 0){ var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); xmlDoc.async = false; //关闭异步加载,这样作可以使得文档加载完全之前,解析起不会继续执行脚本 xmlDoc.load(url); } //FireFox下加载xml文件 if(isFirefox=navigator.userAgent.indexOf('Firefox')>0){ var xmlDoc = Documnet.Implementation.createDocument("", "", null); xmlDoc.async = false; //关闭异步加载,这样做可以使得文档加载完全之前,解析起不会继续执行脚本 xmlDoc.load(url); } }
当然,还有其他很多解析xml的方法,这里总结一下我用到的2种,这两种也是比较常用的两种方法。