js操作XML文件兼容IE与FireFox

最近项目中用到了xml,需求是用户安装产品时先把一系列的数据保存到xml文件中,当执行到最后一步时才写入数据库,这样最大限度的减少了数据库的访问,于是不得不纠结在各浏览器的妇道兼容性的问题(悲哀啊....)

进入正文 下面是一个xml文件 (createInstal.xml)

<? xml version="1.0" encoding="utf-8" ?>
< info >
< Item >
< id descrption ="级别" 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);
}
return null ;
}
// 将一个xml文档格式的字符串换成xml文档
function createXml(xmlText) {
if ( ! xmlText) {
return null ;
try {
var xmldocm = new ActiveXObject( " Microsoft.XMLDOM " );
xmldocm.loadXML(xmlText);
return xmldocm;
}
catch (e) {
try {
return new DOMParse().parseFromString(xmlText, " text/xml " );
}
catch (e) {
return null ;
}
}
}
}
// 获取节点及其子节点的文本
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);

}
// 获取指定节点的文本
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的兼容,(目前谷歌浏览器没有办法用这种方法兼容,还待修改)

转载于:https://www.cnblogs.com/youshan/archive/2011/04/23/2025476.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值