ÍøÂçѧԺ w3popÉçÇø ÍøÂç×ÊÔ´ ITÐÂÎÅ

w3pop.com :: ÍøÂçѧԺ :: JavaScript :: javascript ÖÐµÄ XMLDOM ¶ÔÏó

»áÔ±µÇ½

ÕʺÅ

ÃÜÂë

»Ø´ð

¼ÇסÃÜÂë

Íü¼ÇÃÜÂë? ×¢²á

JavaScript
JSÊýѧ¶ÔÏó²Î¿¼
JS×Ö·û´®¶ÔÏó²Î¿¼
JSº¯Êý²Î¿¼
JSʼþ²Î¿¼
Javascript ³£ÓÃÕ..
FFºÍIEϵÄjs¼æÈÝ..
jQuery ¼òµ¥½éÉÜ
jQuery / ºËÐÄ / ..
jQuery / ºËÐÄ / ..
ÈçºÎʹÓÃJSÀ´ÅжÏ..
JavascriptÔÚIEºÍ..
3¸öjs×Ö·û±àÂ뺯Ê..
javascript ÖÐµÄ ..

javascript ÖÐµÄ XMLDOM ¶ÔÏó


×÷Õß:w3pop.com ·­Òë/ÕûÀí:w3pop.com ·¢²¼:2008-09-14 ÐÞ¸Ä:2008-09-14 ä¯ÀÀ:755 :: ::

Ò» IEÖеÄXML DOM
1.΢Èíͨ¹ýActiveXµÄMSXML¿âÌṩÁËÖ§³Ö£¬Í¨¹ý£º

 var oXmlDom = new ActiveXObject("MSXML2.DOMDocument.5.0")

µÃµ½Ò»¸öXML DOM¶ÔÏó£¬ÕâÊÇÔÚIE6Öеģ¬Èç¹ûÄãµÄIEÊǸüÀϰ汾µÄ£¬¿ÉÒÔʹÓÃÏÂÃæµÄº¯ÊýµÃµ½£¬Èç¹ûÄãûÓа²×°MSXML£¬½«²»Äܵõ½£º

 function createXMLDOM() {
        
            
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");           
        }     


µ±È»£¬Èç¹ûÄãʹÓÃprototype¿â£¬¿ÉÒÔʹÓÃTry.theseº¯Êý¡£

2.XML DOM¶ÔÏó¿ÉÒÔͨ¹ýloadºÍloadXML·½·¨ÔØÈëxmlÎļþ»òÕß×Ö·û´®£º

     oXmlDom.load("test.xml");
     oXmlDom.loadXML(
"<root></root>");

È»ºóÕâ¸öoXmlDom¾Í¿ÉÒÔʹÓÃËùÓеÄDOM¶ÔÏó·½·¨£¬±ÈÈçdocumentElement.tagName,²Î¼û£º
 ¡¶javascriptÖ®DOM¼¼Êõ£¨Ò»£©¡·
 ¡¶javascriptÖ®dom¼¼Êõ£¨¶þ£©¡·

3.XML DOMĬÈÏÊÇͨ¹ýÒì²½ÔØÈëxmlÎļþµÄ£¬¿ÉÒÔͨ¹ýÉèÖÃasyncÖµÀ´Ñ¡ÔñÊÇͬ²½»¹ÊÇÒì²½£º

oXmlDom.async=true;


4.IEµÄXML DOMÓµÓÐÒ»¸öreadyStateÖµÓÃÀ´±íÊ¾ÔØÈëÎļþµÄ״̬£º

0——×¼±¸ÔØÈë
1——ÕýÔÚÔØÈë
2——ÔØÈëÍê³É
3——ÔØÈëÍê³É²¢¿ÉÓ㬵«ÓÐÒ»²¿·ÖÊý¾ÝÒ²Ðí²»¿ÉÓÃ
4——ÍêÈ«ÔØÈ룬ÍêÈ«¿ÉÓá£

ÏàÓ¦µÄÓÐÒ»¸öonreadystatechangeʼþ£¬µ±×´Ì¬¸Ä±äʱ·¢Éú£¬ÎÒÃÇ¿ÉÒÔͨ¹ý¼àÌý´ËʼþÀ´ÅжÏXML DOM¶ÔÏóµÄ¿ÉÓÃÐÔ

oXmlDom.onreadystatechange = function () {
                
if (oXmlDom.readyState == 4) {
                    alert(
"load test.xml done!");
                    alert(
"Tag name of the root element is " + oXmlDom.documentElement.tagName);
                    alert(
"The root element has this many children: " + oXmlDom.documentElement.childNodes.length);

                }
            };


5.IEµÄXML DOM¶ÔÏóÓÐÒ»¸öxmlÊôÐÔ£¬ÓÃÀ´·µ»ØxmlÎļþµÄ×Ö·û´®ÐÎʽ£¬±ÈÈç

oXmlDom.async=false;
oXmlDom.load(
"test.xml");
alert(oXmlDom.xml);


alert³ö£º<root><child/><child/></root>

6.IE£¬µ±ÔØÈëµÄXMLÎļþ»òÕß×Ö·û´®½âÎö´íÎóʱ£¬½«²úÉúÒ»¸öparseError¶ÔÏó£¬ÎÒÃÇÔÚÏÂÃæµÄ´úÂëÖÐÑÝʾ´Ë¶ÔÏóµÄÊôÐÔ£º

            oXmlDom.async = false;
            oXmlDom.load(
"errors.xml");
            
            
//0±íʾûÓдíÎó
            if (oXmlDom.parseError != 0) {
                
var oError = oXmlDom.parseError;
            
                alert(
"An error occurred:\n´íÎó´úÂë: "
                      
+ oError.errorCode + "\n"
                      
+ "ÐÐÊý: " + oError.line + "\n"
                      
+ "ÁÐÊý: " + oError.linepos + "\n"
                      
+ "Ô­Òò: " + oError.reason);
                      
            }



¶þ.MozillaµÄXML DOM¶ÔÏó
1.XML DOM¶ÔÏóµÄ´´½¨£¬·ûºÏDOM±ê×¼µÄ£¬Í¨¹ýdocument.implementation.createDocument()·½·¨¡£±ÈÈ磺

var oXmlDom=document.implementation.createDocument("","",null);


ÕâÈý¸ö²ÎÊý·Ö±ðÊÇÎĵµÃüÃû¿Õ¼ä¡¢ÎĵµÔªËصıêÇ©ÃûÒÔ¼°Ò»¸öÎĵµÀàÐͶÔÏó£¨×ÜΪnull£©£¬±ÈÈ磺

var oXmlDom=document.implementation.createDocument("http://www.rubyeye.net","root",null);


Õâ¶Î´úÂë´´½¨ÁËÒ»¸ö<a0:root xmlns="http://www.rubyeye.net"/>µÄXML DOM¶ÔÏó


2.ÔØÈëxml£¬MozillaÓëIE²»Í¬µÄÊÇÖ»ÌṩÁËÒ»¸öload()·½·¨ÓÃÓÚÔØÈëxmlÎļþ£¬Ã»ÓÐÌṩloadXML()·½·¨ÓÃÓÚÔØÈëXML×Ö·û´®¡£Í¬²½ÔØÈëXMLÎļþµÄ´úÂëÓëIEÏàͬ£º

oXmlDom.async=false;
oXmlDom.load(
"test.xml");


Òì²½ÔØÈëÉÔÓв»Í¬£¬ÒòΪMozilla²¢²»Ö§³ÖreadyStateÊôÐÔ£¬²¢ÇÒûÓÐonreadystatechangeʼþ£¬ËüÖ»ÓÐÒ»¸öonloadµÄʼþ£¬µ±ÔØÈëÍê³Éʱ´¥·¢£»»òÕß˵Ï൱ÓÚIEµÄreadyStateÊôÐÔµÈÓÚ4µÄ״̬¡£

oXmlDom.onload=function(){
alert(
"done");
}
oXmlDom.load(
"test.xml");


Òª½«XML×Ö·û´®½âÎöΪDOM¶ÔÏ󣬱ØÐëʹÓÃDOMParser¶ÔÏó£º

var oParser=new DOMParser();
var oXmlDom=oParser.parseFromString(
"<root><child/></root>,"text/xml");


Á½¸ö²ÎÊý£ºÒª½âÎöµÄXML×Ö·û´®ÒÔ¼°×Ö·û´®µÄÄÚÈÝÀàÐÍ£¨Ö»ÄÜΪtext/xml»òÕßapplication/xml£©¡£
²»¹ýÎÒÃÇ¿ÉÒÔʵÏÖ×Ô¼ºµÄloadXML·½·¨:

  Document.prototype.loadXML = function (sXml) {
    
            
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);
            }
        
        };


3.MozillaûÓÐÌṩIEµÄxmlÊôÐÔÀ´·µ»ØXMLÎĵµÄÚÈÝ£¬Ö»ÄÜͨ¹ýʹÓÃXMLSerializer¶ÔÏó£º

var oSerializer=new XMLSerializer();
var sXml=oSerializer.serializeToString(oXmlDom,"text/xml");

ͬÑùÁ½¸ö²ÎÊý£ºXML DOM¶ÔÏóÒÔ¼°×ª»¯³ÉµÄÎĵµÀàÐÍ¡£

ͬÑù£¬ÎÒÃÇÒ²¿ÉÒÔ¸øMozillaµÄXML DOM¶ÔÏó¶¨ÒåÒ»¸öÊôÐÔxml£¬Í¨¹ýdefineGetter·½·¨£º

Node.prototype.__defineGetter__("xml",function(){
var oSerializer=new XMLSerializer();
var sXml=oSerializer.serializeToString(this,"text/xml");
});


ÒÔºó¾Í¿ÉÒÔÒÔIEµÄ·½Ê½£¬oXmlDom.xmlÀ´»ñÈ¡XMLÎĵµÄÚÈÝ¡£

4¡£´íÎó´¦Àí£¬Í¬ÑùÓëIE²»Í¬£¬Mozillaµ±½âÎö´íÎóʱ»á·µ»ØÒ»¶Î´úÂ룬ÒÔ±êÇ©<prasereoor>°üÀ¨ÆäÖеĴúÂë½âÊÍÁË´íÎó·¢ÉúµÄÔ­ÒòÒÔ¼°Î»ÖõÈÐÅÏ¢£¬ÎÒÃÇÖ»ÓÐͨ¹ýÕýÔò±í´ïʽ½âÎö´Ë¶Î´úÂ룬ÌáÈ¡´íÎóÐÅÏ¢¡£

      var reError = />([\s\S]*?)Location:([\s\S]*?)Line Number (\d+), Column (\d+):<sourcetext>([\s\S]*?)(?:\-*\^)/;
           
            
//·µ»Ø´úÂëµÄ±êÇ©ÃûΪparsererror£¬±íʾ´íÎó·¢Éú
            if (oXmlDom.documentElement.tagName == "parsererror") {
                reError.test(oXmlDom.xml);
                alert(
"An error occurred:\nÃèÊö: "
                    
+ RegExp.$1 + "\n"
                    
+ "ÎļþÃû: " + RegExp.$2 + "\n"
                    
+ "ÐÐÊý: " + RegExp.$3 + "\n"
                    
+ "ÁÐÊý: " + RegExp.$4 + "\n"
                    
+ "Ô­Òò: " + RegExp.$5);
            }


Èý£¬Ìṩһ¸ö¿çä¯ÀÀÆ÷µÄXML DOM¶ÔÏó½â¾ö·½°¸£¬À´×ÔÓÚ¡¶javascript¸ß¼¶³ÌÐòÉè¼Æ¡·


function XmlDom() {
    
//ͨ¹ý¶ÔÏó/ÊôÐÔ¼ì²â·¨£¬ÅжÏÊÇIEÀ´ÊÇMozilla
    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);

        
//´´½¨Mozilla°æ±¾µÄparseError¶ÔÏó
        oXmlDom.parseError = {
            valueOf: 
function () { return this.errorCode; },
            toString: 
function () { return this.errorCode.toString() }
        };
        
        
//³õʼ»¯parseError¶ÔÏó
        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.");
    }
}

//´Ë´¦Óõ½Á˸ÃÊéÖÐÒ»¸öä¯ÀÀÆ÷ϵͳ¼ì²âjsÎļþ£¬Èç¹ûÊÇMozilla
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();
        }
    };
    
//³õʼ»¯parseError¶ÔÏó
    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;
        }
    };
    
     
//¶¨ÒåMozillaµÄloadXML·½·¨   
    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__();
        
        
//ûÓÐÎÊÌ⣬ÉèÖÃreadyStateÊôÐÔΪ4
        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");
    });

}

ÆÀÂÛ (1) 1 All