XML的操作

本文介绍了一种跨浏览器处理XML文件的方法,包括了检测浏览器类型和版本的JavaScript代码,以及使用不同浏览器内置对象加载和解析XML的技术。适用于需要兼容多种浏览器环境的Web应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先是判定浏览器的类型和版本的js:

var sUserAgent = navigator.userAgent;
var fAppVersion = parseFloat(navigator.appVersion);

function compareVersions(sVersion1, sVersion2) {

   
var arrVersion1 = sVersion1.split(".");
   
var arrVersion2 = sVersion2.split(".");
   
   
if (arrVersion1.length > arrVersion2.length) {
       
for (var i=0; i < arrVersion1.length - arrVersion2.length; i++) {
            arrVersion2.push(
"0");
        }
    }
else if (arrVersion1.length < arrVersion2.length) {
       
for (var i=0; i < arrVersion2.length - arrVersion1.length; i++) {
            arrVersion1.push(
"0");
        }   
    }
   
   
for (var i=0; i < arrVersion1.length; i++) {

       
if (arrVersion1[i] < arrVersion2[i]) {
           
return -1;
        }
else if (arrVersion1[i] > arrVersion2[i]) {
           
return 1;
        }   
    }
   
   
return 0;

}

var isOpera = sUserAgent.indexOf("Opera") > -1;
var isMinOpera4 = isMinOpera5 = isMinOpera6 = isMinOpera7 = isMinOpera7_5 = false;

if (isOpera) {
   
var fOperaVersion;
   
if(navigator.appName == "Opera") {
        fOperaVersion
= fAppVersion;
    }
else {
       
var reOperaVersion = new RegExp("Opera (\\d+\\.\\d+)");
        reOperaVersion.test(sUserAgent);
        fOperaVersion
= parseFloat(RegExp["$1"]);
    }

    isMinOpera4
= fOperaVersion >= 4;
    isMinOpera5
= fOperaVersion >= 5;
    isMinOpera6
= fOperaVersion >= 6;
    isMinOpera7
= fOperaVersion >= 7;
    isMinOpera7_5
= fOperaVersion >= 7.5;
}

var isKHTML = sUserAgent.indexOf("KHTML") > -1
             
|| sUserAgent.indexOf("Konqueror") > -1
             
|| sUserAgent.indexOf("AppleWebKit") > -1;
             
var isMinSafari1 = isMinSafari1_2 = false;
var isMinKonq2_2 = isMinKonq3 = isMinKonq3_1 = isMinKonq3_2 = false;

if (isKHTML) {
    isSafari
= sUserAgent.indexOf("AppleWebKit") > -1;
    isKonq
= sUserAgent.indexOf("Konqueror") > -1;

   
if (isSafari) {
       
var reAppleWebKit = new RegExp("AppleWebKit\\/(\\d+(?:\\.\\d*)?)");
        reAppleWebKit.test(sUserAgent);
       
var fAppleWebKitVersion = parseFloat(RegExp["$1"]);

        isMinSafari1
= fAppleWebKitVersion >= 85;
        isMinSafari1_2
= fAppleWebKitVersion >= 124;
    }
else if (isKonq) {

       
var reKonq = new RegExp("Konqueror\\/(\\d+(?:\\.\\d+(?:\\.\\d)?)?)");
        reKonq.test(sUserAgent);
        isMinKonq2_2
= compareVersions(RegExp["$1"], "2.2") >= 0;
        isMinKonq3
= compareVersions(RegExp["$1"], "3.0") >= 0;
        isMinKonq3_1
= compareVersions(RegExp["$1"], "3.1") >= 0;
        isMinKonq3_2
= compareVersions(RegExp["$1"], "3.2") >= 0;
    }
   
}

var isIE = sUserAgent.indexOf("compatible") > -1
          
&& sUserAgent.indexOf("MSIE") > -1
          
&& !isOpera;
          
var isMinIE4 = isMinIE5 = isMinIE5_5 = isMinIE6 = false;

if (isIE) {
   
var reIE = new RegExp("MSIE (\\d+\\.\\d+);");
    reIE.test(sUserAgent);
   
var fIEVersion = parseFloat(RegExp["$1"]);

    isMinIE4
= fIEVersion >= 4;
    isMinIE5
= fIEVersion >= 5;
    isMinIE5_5
= fIEVersion >= 5.5;
    isMinIE6
= fIEVersion >= 6.0;
}

var isMoz = sUserAgent.indexOf("Gecko") > -1
           
&& !isKHTML;
           
var isMinMoz1 = sMinMoz1_4 = isMinMoz1_5 = false;

if (isMoz) {
   
var reMoz = new RegExp("rv:(\\d+\\.\\d+(?:\\.\\d+)?)");
    reMoz.test(sUserAgent);
    isMinMoz1
= compareVersions(RegExp["$1"], "1.0") >= 0;
    isMinMoz1_4
= compareVersions(RegExp["$1"], "1.4") >= 0;
    isMinMoz1_5
= compareVersions(RegExp["$1"], "1.5") >= 0;
}

var isNS4 = !isIE && !isOpera && !isMoz && !isKHTML
           
&& (sUserAgent.indexOf("Mozilla") == 0)
           
&& (navigator.appName == "Netscape")
           
&& (fAppVersion >= 4.0 && fAppVersion < 5.0);

var isMinNS4 = isMinNS4_5 = isMinNS4_7 = isMinNS4_8 = false;

if (isNS4) {
    isMinNS4
= true;
    isMinNS4_5
= fAppVersion >= 4.5;
    isMinNS4_7
= fAppVersion >= 4.7;
    isMinNS4_8
= fAppVersion >= 4.8;
}

var isWin = (navigator.platform == "Win32") || (navigator.platform == "Windows");
var isMac = (navigator.platform == "Mac68K") || (navigator.platform == "MacPPC")
           
|| (navigator.platform == "Macintosh");

var isUnix = (navigator.platform == "X11") && !isWin && !isMac;

var isWin95 = isWin98 = isWinNT4 = isWin2K = isWinME = isWinXP = false;
var isMac68K = isMacPPC = false;
var isSunOS = isMinSunOS4 = isMinSunOS5 = isMinSunOS5_5 = false;

if (isWin) {
    isWin95
= sUserAgent.indexOf("Win95") > -1
             
|| sUserAgent.indexOf("Windows 95") > -1;
    isWin98
= sUserAgent.indexOf("Win98") > -1
             
|| sUserAgent.indexOf("Windows 98") > -1;
    isWinME
= sUserAgent.indexOf("Win 9x 4.90") > -1
             
|| sUserAgent.indexOf("Windows ME") > -1;
    isWin2K
= sUserAgent.indexOf("Windows NT 5.0") > -1
             
|| sUserAgent.indexOf("Windows 2000") > -1;
    isWinXP
= sUserAgent.indexOf("Windows NT 5.1") > -1
             
|| sUserAgent.indexOf("Windows XP") > -1;
    isWinNT4
= sUserAgent.indexOf("WinNT") > -1
             
|| sUserAgent.indexOf("Windows NT") > -1
             
|| sUserAgent.indexOf("WinNT4.0") > -1
             
|| sUserAgent.indexOf("Windows NT 4.0") > -1
             
&& (!isWinME && !isWin2K && !isWinXP);
}

if (isMac) {
    isMac68K
= sUserAgent.indexOf("Mac_68000") > -1
              
|| sUserAgent.indexOf("68K") > -1;
    isMacPPC
= sUserAgent.indexOf("Mac_PowerPC") > -1
              
|| sUserAgent.indexOf("PPC") > -1
}

if (isUnix) {
    isSunOS
= sUserAgent.indexOf("SunOS") > -1;

   
if (isSunOS) {
       
var reSunOS = new RegExp("SunOS (\\d+\\.\\d+(?:\\.\\d+)?)");
        reSunOS.test(sUserAgent);
        isMinSunOS4
= compareVersions(RegExp["$1"], "4.0") >= 0;
        isMinSunOS5
= compareVersions(RegExp["$1"], "5.0") >= 0;
        isMinSunOS5_5
= compareVersions(RegExp["$1"], "5.5") >= 0;
    }
}

然后是实现跨浏览器加载XML文件的js

function XmlDom() {
   
if (window.ActiveXObject) {
       
var arrSignatures = ["MSXML2.DOMDocument.5.0", "MSXML2.DOMDocument.4.0",
                            
"MSXML2.DOMDocument.3.0", "MSXML2.DOMDocument",
                            
"Microsoft.XmlDom"];
                        
       
for (var i=0; i < arrSignatures.length; i++) {
           
try {
       
               
var oXmlDom = new ActiveXObject(arrSignatures[i]);
           
               
return oXmlDom;
       
            }
catch (oError) {
               
//ignore
            }
        }         

       
throw new Error("MSXML is not installed on your system.");
             
    }
else if (document.implementation && document.implementation.createDocument) {
       
       
var oXmlDom = document.implementation.createDocument("","",null);

        oXmlDom.parseError
= {
            valueOf:
function () { return this.errorCode; },
            toString:
function () { return this.errorCode.toString() }
        };
       
        oXmlDom.__initError__();
               
        oXmlDom.addEventListener(
"load", function () {
           
this.__checkForErrors__();
           
this.__changeReadyState__(4);
        },
false);

       
return oXmlDom;       
       
    }
else {
       
throw new Error("Your browser doesn't support an XML DOM object.");
    }
}

if (isMoz) {

    Document.prototype.readyState
= 0;
    Document.prototype.onreadystatechange
= null;

    Document.prototype.__changeReadyState__
= function (iReadyState) {
       
//this.readyState = iReadyState;

       
if (typeof this.onreadystatechange == "function") {
           
this.onreadystatechange();
        }
    };

    Document.prototype.__initError__
= function () {
       
this.parseError.errorCode = 0;
       
this.parseError.filepos = -1;
       
this.parseError.line = -1;
       
this.parseError.linepos = -1;
       
this.parseError.reason = null;
       
this.parseError.srcText = null;
       
this.parseError.url = null;
    };
   
    Document.prototype.__checkForErrors__
= function () {

       
if (this.documentElement.tagName == "parsererror") {

           
var reError = />([\s\S]*?)Location:([\s\S]*?)Line Number (\d+), Column (\d+):<sourcetext>([\s\S]*?)(?:\-*\^)/;

            reError.test(
this.xml);
           
           
this.parseError.errorCode = -999999;
           
this.parseError.reason = RegExp.$1;
           
this.parseError.url = RegExp.$2;
           
this.parseError.line = parseInt(RegExp.$3);
           
this.parseError.linepos = parseInt(RegExp.$4);
           
this.parseError.srcText = RegExp.$5;
        }
    };
   
       
    Document.prototype.loadXML
= function (sXml) {
   
       
this.__initError__();
   
       
this.__changeReadyState__(1);
   
       
var oParser = new DOMParser();
       
var oXmlDom = oParser.parseFromString(sXml, "text/xml");

       
while (this.firstChild) {
           
this.removeChild(this.firstChild);
        }

       
for (var i=0; i < oXmlDom.childNodes.length; i++) {
           
var oNewNode = this.importNode(oXmlDom.childNodes[i], true);
           
this.appendChild(oNewNode);
        }
       
       
this.__checkForErrors__();
       
       
this.__changeReadyState__(4);

    };
   
    Document.prototype.__load__
= Document.prototype.load;

    Document.prototype.load
= function (sURL) {
       
this.__initError__();
       
this.__changeReadyState__(1);
       
this.__load__(sURL);
    };
   
    Node.prototype.__defineGetter__(
"xml", function () {
       
var oSerializer = new XMLSerializer();
       
return oSerializer.serializeToString(this, "text/xml");
    });

}

然后是xml的操作js

/**
* @author Administrator
*/
function XMLOperater(a){
   
var xDoc = new XmlDom();
    xDoc.async
= false;
   
var b = xDoc.load(a);
   
if(!b){
       
return;
    }
   
var p = getChildNodeByTagName(xDoc,"root的名字");
   
if(!p){
       
return;
    }
   
this.attr= getAttribute(p,"root的属性");
    n
= getChildNodeByTagName(p,"root下的节点");
   
if(n){
       
this.gridsize = getAttribute(n,"root下节点的属性");
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值