最近项目中用到了xml,需求是用户安装产品时先把一系列的数据保存到xml文件中,当执行到最后一步时才写入数据库,这样最大限度的减少了数据库的访问,于是不得不纠结在各浏览器的兼容性的问题(悲哀啊....)
进入正文 下面是一个xml文件 (createInstal.xml)
<"1.0" encoding="utf-8""级别" name="1" f_chines="编号" t_chines="編號" english="id" value="1">编号</id> <levelname descrption="级别" name="" f_chines="级别名称" t_chines="級別名稱" english="Level-Name" value="级别一">级别名称</levelname> <decrption descrption="级别" name="" f_chines="级别描述" t_chines="級別描述" english="Level-Description" value="级别描述一">描述</decrption> <Tchines descrption="级别" name="" f_chines="繁体中文" t_chines="繁體中文" english="T-Chinese" value="級別一">繁体中文</Tchines> <english descrption="级别" name="" f_chines="英文名称" t_chines="英文名稱" english="English" value="LevelOne">英文名称</english> <奖项六 descrption="奖项" name="106" f_chines="奖项六" t_chines="獎項六" english="Worda-of-t" value="a"/> <奖项十一 descrption="奖项" name="111" f_chines="奖项十一" t_chines="獎項十一" english="11" value="0.05"/> <奖项十二 descrption="奖项" name="112" f_chines="奖项十二" t_chines="獎項十二" english="2222" value="0.04"/> <奖项十三 descrption="奖项" name="113" f_chines="奖项十三" t_chines="獎項十三" english="3333" value="0.85"/> <奖项一 descrption="奖项" name="101" f_chines="奖项一" t_chines="獎項一" english="Aword-of-a" value="0.90"/> </Item> </info>
为了能兼容IE与FF,写如下几个函数(loadxml.js):
var is_Ie =false; //是否为IE浏览器 if (window.ActiveXObject) { is_Ie =true; } //加载多浏览器兼容的xml文档 function loadXml(xmlUrl) { var xmldoc =null; try { xmldoc =new ActiveXObject("Microsoft.XMLDOM"); } catch (e) { try { xmldoc = document.implementation.createDocument("", "", null); } catch (e) { alert(e.message); } } try { //关闭异步加载 xmldoc.async =false; xmldoc.load(xmlUrl); return xmldoc; } catch (e) { alert(e.message); } returnnull; } //将一个xml文档格式的字符串换成xml文档 function createXml(xmlText) { if (!xmlText) { returnnull; try { var xmldocm =new ActiveXObject("Microsoft.XMLDOM"); xmldocm.loadXML(xmlText); return xmldocm; } catch (e) { try { returnnew DOMParse().parseFromString(xmlText, "text/xml"); } catch (e) { returnnull; } } } } //获取节点及其子节点的文本 function getXmlText(oNode) { if (oNode.text) {//IE return oNode.tex; } var sText =""; for (var i =0; i < oNode.childNodes.length; i++) { //遍历子节点 if (oNode.childNodes[i].hasChildNodes()) { //是否有子节点 sText += getXmlText(oNode.childNodes[i]); } else { sText += oNode[i].childNodes.nodeValue; } } return sText; } //获取节点及其子节点的字符串标识 function getXml(oNode) { if (oNode.xml) {//IE return oNode.xml; } var serializer =new XMLSerializer(); return serializer.serializeToString(oNode); } //获取指定节点的文本(注意:也可以用oNode.childNodes[0].nodeValue来获取节点的文本信息,这样就不用考虑浏览器的问题了oNodeoNode) function getxmlnodeText(oNode) { if (is_Ie) { return oNode.text; } else { if (oNode.nodeType ==1) return oNode.textContent; } } //获取指定节点的属性值 function getxmlnodeattribute(oNode, attrName) { if (is_Ie) { return oNode.getAttribute(attrName); } else { if (oNode.nodeType ==1|| oNode.nodeType =="1")return oNode.attributes[attrName].value;return"undefined";}}
ok IE与FF 不再是问题,具体的操作方法如下:
var docum = loadxml("createInstal.xml");//加载一个xml文件 var root = docum.documentElement;//根节点 var nodelist = root.getElementsByTagName("Items"); for(var i=0;i<nodelist[0].childNodes.length;i++) { var attr = getxmlnodeattribute(nodeList[0].childNodes[i], "descrption");//获取这个节点的descrption属性 if(attr != "undefined")//目的是兼容FF浏览器 { alert(attr); } }
这样就能保证IE与FF的兼容,(目前谷歌浏览器没有办法用这种方法兼容,还待修改)
另外说下FireFox获取xml的两种方法:
firefox中JS读取XML文件
在网上搜“firefox中JS读取XML文件”的方法,找了半天,好 多都是问了没人答的。看到一堆程序员在抱怨firefox:“除了累死程序员没什么好处。”,言归正传。firefox不支持ie中的 ActiveXObject对象,要得到一个XML DOM有以下2种方法:
1、document.implementation.createDocument("", "", null);
2、window.XMLHttpRequest
示例:1、var dom=document.implementation.createDocument("", "", null);
dom.async=false;
dom.load("test.xml");//dom就是xml对象了。
2、var oXmlHttp = new XMLHttpRequest() ;
oXmlHttp.open( "GET", "test.xml", false ) ;
oXmlHttp.send(null) ;
//oXmlHttp.responseXML就是xml对象了。
注意:
1、火狐解析xml文档
2、火狐浏览器和ie解析xml不一样节点的值用textContent。
3、并且他会在有的层次child节点(即使用childNodes时)前后都加上"\n"换行符。(这个搞不清楚为什么,用firebug调试的时候就是这个样子,所以写过的代码最好测试一下,换个环境就不对了) ,也就是说第1个节点是"\n",第2个节点才是真正的
第一个节点。 第3个节点是"\n",第4个节点才是真正的第二个节点。
根据上述的火狐的情况,我这里有个例子避免了使用childNodes,而达到兼容性:点击进入
以上就是小编为大家带来的js操作XML文件的实现方法兼容IE与FireFox全部内容了,希望大家多多支持~
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
更新日志
- 张芸京.2016-失败的高歌【泡耳音乐】【WAV+CUE】
- 天籁女声《2024第31届上海国际高端音影展纪念CD》[WAV+CUE][1.1G]
- 姚斯婷 《敢爱敢做》头版限量编号24K金碟[低速原抓WAV+CUE][1.2G]
- 雷婷 《把爱留在昨天》紫银合金AQCD[低速原抓WAV+CUE][1.1G]
- 董文华2024-《精选30年·长城长HQ》头版限量[WAV+CUE]
- 柏菲·魏松2024-《跟你走》限量开盘母带ORMCD[WAV+CUE]
- 柏菲·甘雅丹《雅鲁藏布》限量开盘母带ORMCD[WAV+CUE]
- 孙露《明天你是否依然爱我》1:1母盘直刻[低速原抓WAV+CUE][1G]
- 群星2024《龙年精选.音乐盛宴》纯银CD[WAV+CUE][1.1G]
- 童丽《君再来VI》妙音首版[WAV+CUE][1G]
- 柏菲·李跃君2024-《寂寞公路》限量开盘母带ORMCD[WAV+CUE]
- 柏菲·古璇2024-《东山飘雨西山晴》限量开盘母带ORMCD[WAV+CUE]
- 群星《2024好听新歌38》AI调整音效【WAV分轨】
- 台湾荷东《周末狂热1》[WAV+CUE][1.1G]
- 群星《Hi.Fi.怀旧金曲.Vol.1》[低速原抓WAV+分轨][996M]