<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

        JavaScript高級程序設(shè)計閱讀筆記(二十一)JavaScript中的XML_javascript技巧

        來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-27 21:04:59
        文檔

        JavaScript高級程序設(shè)計閱讀筆記(二十一)JavaScript中的XML_javascript技巧

        JavaScript高級程序設(shè)計閱讀筆記(二十一)JavaScript中的XML_javascript技巧:一、IE中的XML DOM支持 IE對XML的支持是基于ActiveX的MSXML庫。 1、DOM創(chuàng)建 對每個新版本的MSXML,都會創(chuàng)建出不同的XML DOM對象,所以盡量選擇新的XML DOM版本。 2、載入XML 載入XML分兩種,即: 載入XML字符串:loadXML(xml字符串)
        推薦度:
        導(dǎo)讀JavaScript高級程序設(shè)計閱讀筆記(二十一)JavaScript中的XML_javascript技巧:一、IE中的XML DOM支持 IE對XML的支持是基于ActiveX的MSXML庫。 1、DOM創(chuàng)建 對每個新版本的MSXML,都會創(chuàng)建出不同的XML DOM對象,所以盡量選擇新的XML DOM版本。 2、載入XML 載入XML分兩種,即: 載入XML字符串:loadXML(xml字符串)

        一、IE中的XML DOM支持
          IE對XML的支持是基于ActiveX的MSXML庫。
          1、DOM創(chuàng)建
          對每個新版本的MSXML,都會創(chuàng)建出不同的XML DOM對象,所以盡量選擇新的XML DOM版本。
          2、載入XML
          載入XML分兩種,即:
          載入XML字符串:loadXML(xml字符串)
          載入xml文件:load(xml文件路徑)。默認(rèn)情況下文件載入是異步的,如果要改為同步把asynce特性改為true即可。異步載入文件時要用到readyState和onreadystatechange事件處理函數(shù)。readyState共有五種可能的值:
            0——DOM尚未初始化任何信息;
            1——DOM正在載入數(shù)據(jù);
            2——DOM完成了數(shù)據(jù)載入;
            3——DOM已經(jīng)可用,不過某些部分可能還不能用;
            4——DOM已經(jīng)完全被載入,可以使用了。
          3、獲取XML
          微軟為每個節(jié)點增加了xml特性,所以獲取XML非常方便,見后面的示例。
          4、解釋錯誤
          可以用parseError來處理XML載入過程中出現(xiàn)的錯誤。
          parseError特性實際上是包含以下特性的對象:
          errorCode:錯誤類型數(shù)字代碼,沒有錯誤為0
          filePos:錯誤發(fā)生在文件中的位置
          line:遇到錯誤的行號
          linepos:在遇到錯誤的那一行上的字符的位置
          reason:對錯誤的一個解釋
          srcText:造成錯誤的代碼
          url:造成錯誤的文件的URL
          5、示例:
        代碼如下:
        function createXMLDOM(){
        var arrSignatures=["MSXML2.DOMDocument.5.0","MSXML2.DOMDocument.4.0","MSXML2.DOMDocument.3.0","MSXML2.DOMDocument","Microsoft.XmlDom"];
        for(var i=0;itry{
        var oXmlDom=new ActiveXObject(arrSignatures[i]);
        return oXmlDom;
        } catch(oError){
        }
        }
        throw new Error("MSXML is not installed on your system");
        }
        var oXmlDom=createXMLDOM();
        //方式一:加載字符串
        oXmlDom.loadXML("");
        //處理錯誤
        if(oXmlDom.parseError != 0){
        var oError=oXmlDom.parseError;
        alert("An Error occurred:\nError Code:" + oError.errorCode
        + "\nLine:" + oError.line + "\nLine Pos:" + oError.linepos
        + "\nReason:" + oError.reason);
        } else {
        var childNodes=oXmlDom.documentElement.childNodes;
        console.log(childNodes.length+" "+childNodes[0].xml);// 1
        }
        //方式二:加載XML文件
        oXmlDom.onreadystatechange = function(){
        //文檔加載完畢
        if(oXmlDom.readyState == 4){
        if(oXmlDom.parseError != 0){
        var oError=oXmlDom.parseError;
        alert("An Error occurred:\nError Code:" + oError.errorCode
        + "\nLine:" + oError.line + "\nLine Pos:" + oError.linepos
        + "\nReason:" + oError.reason);
        } else {
        var childNodes=oXmlDom.documentElement.childNodes;
        console.log(childNodes.length+" "+childNodes[0].xml);// 1
        }
        }
        }
        oXmlDom.load("test.xml");

        二、Mozilla中的XML DOM支持
          1、創(chuàng)建DOM
          DOM標(biāo)準(zhǔn)指出,document.implementation有個 createDocument() 方法:
        var oXmlDom=document.implementation.createDocument("","",null);  其中,第一個參數(shù)為文檔的命名空間URL,文檔元素的標(biāo)簽名,和文檔類型對象(總是為null,因為在Mozilla中還沒有支持)。
          2、載入XML
          Mozilla只支持一個載入XML的方法:load(文件名)。
          同步或異步由async決定,默認(rèn)為異步。
          如果是XML字符串,要用DOMParser對象來轉(zhuǎn)換成DOM,用法如下:
        代碼如下:
        var oParser = new DOMParser();
        var oXmlDom = oParser.parseFromString("","text/xml");

         parseFromString方法第一個參數(shù)為XML字符串,第二個參數(shù)為內(nèi)容類型??梢允?"text/xml" 或 "application/xml"。
          3、獲取XML
          微軟提供的xml特性因為不是標(biāo)準(zhǔn),所以Mozilla不支持,Mozilla提供了XMLSerializer對象:
        代碼如下:
        var oSerializer = new XMLSerializer();
        var sXml = oSerializer.serializeToString(oXmlDom,"text/xml");  在后面的例子中我們可以看到如何用defineGetter()方法來定義一個xml特性。

          4、解析錯誤
          在XML文件的解析過程中發(fā)生錯誤時,XML DOM會創(chuàng)建文檔來解釋這個錯誤。常常用正則來輸出錯誤信息:
        代碼如下:
        var reError = />([\s\S]*?)Location:([\s\S]*?)Line Number (\d+),Column (\d+):([\s\S]*?)(?:\-*\^)/;
        if(oXmlDom.documentElement.tagName == "parsererror"){
        reError.test(oXmlDom.xml);
        alert("An error occurred:\nDescription: " + RegExp.$1 +"\n"
        + "File: " + RegExp.$2 + "\n"
        + "Line: " + RegExp.$3 + "\n"
        + "Line Pos: " + RegExp.$4 + "\n"
        + "Source: " + RegExp.$5);
        }

        5、示例
        代碼如下:
        var oXmlDom=document.implementation.createDocument("","",null);
        oXmlDom.async = false;
        oXmlDom.onload = function(){
        alert('Done');
        }
        var reError = />([\s\S]*?)Location:([\s\S]*?)Line Number (\d+),Column (\d+):([\s\S]*?)(?:\-*\^)/;
        if(oXmlDom.documentElement.tagName == "parsererror"){
        reError.test(oXmlDom.xml);
        alert("An error occurred:\nDescription: " + RegExp.$1 +"\n"
        + "File: " + RegExp.$2 + "\n"
        + "Line: " + RegExp.$3 + "\n"
        + "Line Pos: " + RegExp.$4 + "\n"
        + "Source: " + RegExp.$5);
        }
        Node.prototype.__defineGetter__("xml", function () {
        var oSerializer = new XMLSerializer();
        return oSerializer.serializeToString(this, "text/xml");
        });
        oXmlDom.load('test.xml');
        alert(oXmldom.xml);
        var oNode = oXmlDom.documentElement.childNodes[1];
        alert(oNode.xml);

        三、通用接口
          下面是兼容IE和FireFox的通用接口:
        代碼如下:
        function XmlDom() {
        if (window.ActiveXObject) {//IE
        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+):([\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);
        };
        Document.prototype.getReadyState = function () {
        return this._readyState_;
        };
        Node.prototype.__defineGetter__("xml", function () {
        var oSerializer = new XMLSerializer();
        return oSerializer.serializeToString(this, "text/xml");
        });
        }

        四、其他瀏覽器
          本書中沒有講到其他瀏覽器,如現(xiàn)在很火的Chrome,最新版的主流瀏覽器現(xiàn)在都已支持上面講到的Mozilla方式。如果不支持,可以用AJAX來讀取處理XML。
        作者:Artwl
        出處:http://artwl.cnblogs.com

        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        JavaScript高級程序設(shè)計閱讀筆記(二十一)JavaScript中的XML_javascript技巧

        JavaScript高級程序設(shè)計閱讀筆記(二十一)JavaScript中的XML_javascript技巧:一、IE中的XML DOM支持 IE對XML的支持是基于ActiveX的MSXML庫。 1、DOM創(chuàng)建 對每個新版本的MSXML,都會創(chuàng)建出不同的XML DOM對象,所以盡量選擇新的XML DOM版本。 2、載入XML 載入XML分兩種,即: 載入XML字符串:loadXML(xml字符串)
        推薦度:
        標(biāo)簽: xml javascript javascript中
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 日韩免费码中文在线观看| 亚洲欧美日韩中文高清www777 | 亚洲综合激情视频| 免费福利在线视频| 亚洲福利在线观看| 在线日本高清免费不卡| 亚洲成年人电影在线观看| 国产成人精品免费午夜app | 国产亚洲高清在线精品不卡| 国产不卡免费视频| 日韩电影免费在线观看网址| 国产成人亚洲精品91专区手机| 免费无码黄网站在线看| 亚洲欧洲免费视频| 免费精品国产自产拍在| 色偷偷尼玛图亚洲综合| 亚洲欧洲中文日韩av乱码| 三上悠亚电影全集免费| 亚洲国产成人久久| 日本一道本高清免费| 国产精品永久免费视频| 亚洲精品自产拍在线观看动漫| 69成人免费视频| 精品在线免费视频| 亚洲AV无码一区东京热| 在线观看免费高清视频| 色吊丝免费观看网站| 国产亚洲一区二区三区在线| 18级成人毛片免费观看| 亚洲第一se情网站| 亚洲AV中文无码字幕色三| 亚洲美女视频免费| 免费看内射乌克兰女| 337p日本欧洲亚洲大胆色噜噜| 精品国产免费观看久久久| 国产在线国偷精品免费看| 亚洲精品第一综合99久久| 国产亚洲一区二区在线观看| 日韩免费a级毛片无码a∨| 久久毛片免费看一区二区三区| 亚洲校园春色另类激情|