w3pop.com :: ÍøÂçѧԺ :: XML :: IEºÍ»ðºü¶ÁÈ¡XML·½·¨±È½Ï
Ò»¡¢IE¶ÁÈ¡XML
var xmlDoc;
xmlDoc = new ActiveXObject( "Msxml2.DOMDocument" );
xmlDoc.loadXML(xml);
//È¡µÄ½Úµã
var points = xmlDoc.documentElement.getElementsByTagName("point");
//È¡µÃ½ÚµãµÄÄÚÈÝÖµ
points
.childNodes[1].text
¶þ¡¢firefox¶ÁÈ¡XML
FirefoxÖд´½¨Ò»¸öXML DOM£¬ÐèÒªµ÷ÓÃdocument.implementation¶ÔÏóµÄcreateDocument()·½·¨¡£¸Ã·½·¨½ÓÊÜÈý¸ö²ÎÊý£ºµÚÒ»¸ö²ÎÊýÊǰüº¬ÎĵµËùʹÓõÄÃüÃû¿Õ¼äURIµÄ×Ö·û´®£»µÚ¶þ¸ö²ÎÊýÊǰüº¬Îĵµ¸ùÔªËØÃû³ÆµÄ×Ö·û´®£»µÚÈý¸ö²ÎÊýÊÇÒª´´½¨µÄÎĵµÀàÐÍ£¨Ò²³ÆÎªdoctype£©¡£Èç¹ûÒª´´½¨¿ÕµÄDOMÎĵµ£¬Ôò´úÂëÈçÏÂËùʾ£º
var oXmlDom = document.implementation.createDocument("", "", null);
ǰÁ½¸ö²ÎÊýÊÇ¿Õ×Ö·û´®£¬µÚÈý¸ö²ÎÊýΪnull£¬ÕâÑù¿ÉÒÔÈ·±£Éú³ÉÒ»¸ö³¹µ×µÄ¿ÕÎĵµ¡£ÊÂʵÉÏ£¬ÏÖÔÚFirefoxÖв¢²»ÌṩÕë¶ÔÎĵµÀàÐ͵ÄJavaScriptÖ§³Ö£¬ËùÒÔµÚÈý¸ö²ÎÊý×ÜÊÇΪnull¡£Èç¹ûÒª´´½¨°üº¬ÎĵµÔªËصÄXML DOM£¬ÄÇô¿ÉÒÔÔÚµÚ¶þ¸ö²ÎÊýÖÐÖ¸¶¨±êÇ©Ãû³Æ£º
var oXmlDom = document.implementation.createDocument("", "books", null);
Õâ¶Î´úÂë´´½¨ÁËÒ»¸öXML DOM£¬ÆädocumentElementÊÇ<books/>¡£Èç¹ûÒª´´½¨°üº¬Ö¸¶¨ÃüÃû¿Õ¼äµÄDOM£¬¿ÉÒÔÔÚµÚÒ»¸ö²ÎÊýÖÐÖ¸¶¨ÃüÃû¿Õ¼äURI£º
var oXmlDom = document.implementation.createDocument("http://www.site1.com",
"books", null);
µ±ÔÚcreateDocument()·½·¨ÖÐÖ¸¶¨ÃüÃû¿Õ¼äʱ£¬ Firefox»á×Ô¶¯¸½ÉÏǰ׺a0ÒÔ±íʾÃüÃû¿Õ¼äURI£º
<a0:books xmlns:a0="http://www.site1.com" />
½Ó×Å£¬Äã¿ÉÒÔͨ¹ý³ÌÐòÀ´Ìî³äXMLÎĵµ£¬²»¹ýÔÚÒ»°ãÇé¿öÏ£¬»¹ÐèÒªÔÚ¿ÕµÄXML DOM¶ÔÏóÖÐÔØÈëÏÖÓеÄXMLÎĵµ¡£
1. ÔÚFirefoxÖÐÔØÈëXMLÊý¾Ý
ÔÚFirefoxÖУ¬½«XMLÔØÈëXML DOMµÄ·½·¨ºÍ΢Èí²ÉÓõķ½·¨´óÖÂÏàͬ£¬Ö»´æÔÚÒ»¸öÏÔÖøÇø±ð£ºFirefoxÖ»Ö§³Öload()·½·¨¡£Òò´Ë£¬ÔÚÕâÁ½ÖÖä¯ÀÀÆ÷ÖÐÔØÈëÍⲿXMLÊý¾ÝµÄ´úÂëÊÇÏàͬµÄ£º
oXmlDom.load("books.xml");
Óë΢ÈíµÄIEÒ»Ñù£¬FirefoxͬÑùʵÏÖÁËasyncÊôÐÔ£¬¸ÃÊôÐÔµÄÐÐΪҲÓëÆäÒ»Ö£º½«asyncÉèÖÃΪfalse£¬±íʾÒÔͬ²½Ä£Ê½ÔØÈëÎĵµ£»·ñÔò£¬ÒÔÒì²½Ä£Ê½ÔØÈëÎĵµ¡£
FirefoxµÄXML DOMʵÏÖºÍ΢ÈíµÄXML DOMʵÏÖ»¹´æÔÚÁíÒ»¸ö²»Í¬£¬¼´Firefox²»Ö§³ÖreadyStateÊôÐÔ¼°onreadystatechangeʼþ´¦Àíº¯Êý¡£ÔÚFirefoxÖУ¬Ö§³ÖloadʼþºÍonloadʼþ´¦Àíº¯Êý¡£ÔÚÎĵµÍêÈ«ÔØÈëºó½«´¥·¢loadʼþ£º
oXmlDom.load("books.xml");
oXmlDom.onload = function () {
//ÎĵµÍêÈ«ÔØÈëºóµÄ²Ù×÷
};
ÕýÈçÇ°ÃæËù˵£¬ÔÚFirefoxµÄXML DOMʵÏÖÖУ¬²¢Ã»ÓÐloadXML()·½·¨£¬²»¹ýͨ¹ýFirefoxÖеÄDOMParserÀà¿ÉÒÔÄ£ÄâloadXML()µÄÐÐΪ¡£¸ÃÀàÓÐÒ»¸öÃûΪparseFromString()µÄ·½·¨£¬ÓÃÀ´ÔØÈë×Ö·û´®²¢½âÎö³ÉÎĵµ£º
var sXml = "<root><person><name>Jeremy McPeak</name></person></root>";
var oParser = new DOMParser();
var oXmlDom = oParser.parseFromString(sXml,"text/xml");
ÔÚÕâ¶Î´úÂëÖУ¬´´½¨ÁËÒ»¸öXML×Ö·û´®£¬²¢×÷Ϊ²ÎÊý´«µÝ¸øDOMParserµÄparseFromString()·½·¨¡£parseFromString()·½·¨µÄÁ½¸ö²ÎÊý·Ö±ðÊÇXML×Ö·û´®ºÍÊý¾ÝµÄÄÚÈÝÀàÐÍ£¨Ò»°ãÉèÖÃΪtext/xml)¡£parseFromString()·½·¨·µ»ØXML DOM¶ÔÏó£¬Òò´ËÕâÀïµÃµ½µÄoXmlDomÓëµÚÒ»¸öÀý×ÓÏàͬ¡£
2. ÔÚFirefoxÖлñÈ¡XMLÊý¾Ý
¾¡¹Ü´æÔÚÕâÑùÄÇÑùµÄ²»Í¬£¬µ«IEºÍFirefoxÖÐÓÃÓÚ»ñÈ¡ÎĵµÖÐXMLÊý¾ÝµÄ´ó¶àÊýÊôÐԺͷ½·¨ÊÇÒ»Öµġ£ÕýÈçÔÚIEÖУ¬¿ÉÒÔʹÓÃdocumentElementÊôÐÔÀ´»ñÈ¡ÎĵµµÄ¸ùÔªËØ£¬ÀýÈ磺
var oRoot = oXmlDom.documentElement;
FirefoxͬÑùÖ§³ÖW3C±ê×¼ÊôÐÔ£¬°üÀ¨childNodes¡¢firstChild¡¢lastChild¡¢nextSibling¡¢nodeName¡¢nodeType¡¢nodeValue¡¢ownerDocument¡¢parentNodeºÍpreviousSibling¡£²»ÐÒµÄÊÇ£¬¶ÔÓÚ΢ÈíרÓеÄtextºÍxmlÊôÐÔ£¬Firefox²¢²»Ö§³Ö£¬²»¹ý¿ÉÒÔÀûÓÃÆäËû·½·¨À´Ä£Äâ¸ÃÊôÐÔµÄÐÐΪ¡£
´ó¼ÒÓ¦¸Ã»¹¼ÇµÃ£¬textÊôÐÔ·µ»ØÁ˵±Ç°½ÚµãµÄÄÚÈÝ£¬»òÕßÊǵ±Ç°½Úµã¼°Æä×Ó½ÚµãµÄÄÚÈÝ¡£Õâ²»½ö½ö·µ»Øµ±Ç°½ÚµãµÄÎı¾£¬»¹ÓÐËùÓÐ×Ó½ÚµãµÄÎı¾£¬Òò´ËҪģÄâ¸Ã¹¦ÄÜʵÏÖÊÇÊ®·ÖÈÝÒ׵ġ£ÏÂÃæÕâ¸ö¼òµ¥µÄº¯Êý¾ÍÄܹ»Íê³É¸Ã¹¦ÄÜ£¬¸Ãº¯ÊýΨһµÄ²ÎÊýÊÇÒ»¸ö½Úµã£º
function getText(oNode) {
var sText = "";
for (var i = 0; i < oNode.childNodes.length; i++) {
if (oNode.childNodes
.hasChildNodes()) {
sText += getText(oNode.childNodes
);
} else {
sText += oNode.childNodes
.nodeValue;
}
}
return sText;
}
ÔÚgetText()º¯ÊýÖУ¬sText±äÁ¿ÓÃÀ´±£´æ»ñÈ¡µÄËùÓÐÎı¾¡£½Ó×ŶÔoNodeµÄ×Ó½ÚµãʹÓÃforÑ»·½øÐбéÀú£¬¼ì²éÿ¸ö×Ó½ÚµãÊÇ·ñ°üº¬×ӽڵ㡣Èç¹ûÓÐ×ӽڵ㣬ÄÇô¾Í½«ÆächildNode´«¸øgetText()º¯Êý£¬²¢½øÐÐͬÑùµÄ´¦Àí£»Èç¹ûûÓÐ×ӽڵ㣬ÄÇô½«µ±Ç°½ÚµãµÄnodeValue¼Óµ½×Ö·û´®ÖУ¨¶ÔÎı¾½Úµã¶øÑÔ£¬ÕâÖ»ÊÇÎı¾×Ö·û´®£©¡£´¦ÀíÁËËùÓÐ×Ó½Úµãºó£¬¸Ãº¯Êý·µ»Ø±äÁ¿sText¡£
IEÖеÄxmlÊôÐÔ½«´æ·Å¶Ôµ±Ç°½Úµã°üº¬µÄËùÓÐXML½øÐÐÐòÁл¯µÄ½á¹û¡£ÔÚFirefoxÖУ¬ÌṩÁËÒ»¸öÃûΪXMLSerializer¶ÔÏóÀ´Íê³ÉÕâÒ»¹¦ÄÜ¡£¸Ã¶ÔÏóÌṩһ¸öʹÓÃJavaScript¿É·ÃÎʵÄserializeToString()·½·¨£¬Ê¹Óø÷½·¨¿ÉÒÔ¶ÔXMLÊý¾Ý½øÐÐÐòÁл¯¡£
function serializeXml(oNode) {
var oSerializer = new XMLSerializer();
return oSerializer.serializeToString(oNode);
}
serializeXml()º¯ÊýÒÔXML½Úµã×÷Ϊ²ÎÊý£¬´´½¨Ò»¸öXMLSerializer¶ÔÏ󣬲¢½«¸Ã½Úµã´«¸øserializeToString()·½·¨¡£¸Ã·½·¨½«Ïòµ÷ÓÃÕß·µ»ØXMLÊý¾ÝµÄ×Ö·û´®±íʾ¡£
¶ÔÓÚ½Úµã²Ù×÷µÄDOM·½·¨£¬FirefoxÓëIE´óÖÂÏàͬ¡£²Î¼û“ÔÚIEÖвÙ×÷DOM”С½Ú¡£
3. ÔÚFirefoxÖд¦Àí´íÎó
FirefoxÓëIEµÄ´íÎó´¦Àí²¢²»Ò»Ñù¡£µ±IEÓöµ½´íÎóʱ£¬Ëü»áÌî³äparseError¶ÔÏó£»¶øµ±FirefoxÓöµ½´íÎóʱ£¬Ëü»á½«°üº¬´íÎóÐÅÏ¢µÄXMLÎĵµÔØÈëµ½XML DOMÎĵµÖС£¿´ÏÂÃæµÄÕâ¸öÀý×Ó£º
var sXml = "<root><person><name>Jeremy McPeak</name></root>";
var oParser = new DOMParser();
var oXmlDom = oParser.parseFromString(sXml,"text/xml");
if (oXmlDom.documentElement.tagName != "parsererror") {
//ûÓдíÎó·¢Éú£¬½øÐÐËùÐè²Ù×÷
} else {
alert("An Error Occurred");
}
ÔÚÍ»³öÏÔʾµÄ´úÂëÐÐÖУ¬Äã»á·¢ÏÖÆäÖн«²úÉúÒ»¸ö´íÎó£ºXML×Ö·û´®¸ñʽ²»ÕýÈ·£¨ÒòΪ<person>ÔªËØ²»ÍêÕû£¬Ã»ÓÐÏàÓ¦µÄ</person>ÔªËØ£©¡£µ±ÔØÈë´íÎóµÄXMLʱ£¬XML DOM¶ÔÏ󽫻áÔØÈëÒ»¸ödocumentElementΪ<parsererror/>µÄ´íÎóÎĵµ¡£ÎÒÃÇ¿ÉÒÔͨ¹ý¼ì²édocumentElementµÄtagNameÊôÐÔÀ´ºÜÈÝÒ×µØÈ·¶¨ÊÇ·ñ·¢Éú´íÎó¡£Èç¹ûtagNameÊôÐÔ²»ÊÇparsererror£¬¾Í¿ÉÒÔÈ·¶¨Ã»Óз¢ÉúÈκδíÎó¡£
ÔÚ±¾ÀýÖУ¬¿ÉÄÜ»áÉú³ÉÈçÏÂËùʾµÄ´íÎóÎĵµ£º
<parsererror xmlns="http://www.mozilla.org/newlayout/xml/parsererror.xml">XML
Parsing Error: mismatched tag. Expected: </person>.
Location: http://yoda/fooreader/test.htm
Line Number 1, Column 43:<sourcetext><root><person><name>Jeremy
McPeak</name></root>
------------------------------------------^</sourcetext></parsererror>
ËùÓеĴíÎóÐÅÏ¢¶¼°üº¬ÔÚ´íÎóÎĵµµÄÎı¾ÖС£Èç¹ûҪͨ¹ý³ÌÐòʹÓÃÕâЩ´íÎóÐÅÏ¢£¬ÄÇôÊ×ÏȾÍÒª¶ÔÆä½øÐнâÎö¡£×î¼òµ¥µÄ·½·¨ÊÇʹÓÃÒ»¸öÉÔ³¤µÄÕýÔò±í´ïʽ£º
var reError = />([\s\S]*?)Location:([\s\S]*?)Line Number (\d+), Column
(\d+):<sourcetext>([\s\S]*?)(?:\-*\^)/;
¸ÃÕýÔò±í´ïʽ½«´íÎóÎĵµ·ÖΪÎå¸ö²¿·Ö£º´íÎóÏûÏ¢¡¢·¢Éú´íÎóµÄÎļþÃû¡¢Ðкš¢¸ÃÐÐÖз¢Éú´íÎóµÄλÖã¬ÒÔ¼°·¢Éú´íÎóµÄÔ´´úÂ롣ʹÓÃÕýÔò±í´ïʽ¶ÔÏóµÄtest()·½·¨¿ÉÒÔʹÓÃÕâЩÐÅÏ¢£º
if (oXmlDom.firstChild.tagName != "parsererror") {
//ûÓдíÎó·¢Éú£¬½øÐÐËùÐè²Ù×÷
} else {
var oXmlSerializer = new XMLSerializer();
var sXmlError = oXmlSerializer.serializeToString(oXmlDom);
var reError = />([\s\S]*?)Location:([\s\S]*?)Line Number (\d+), Column
(\d+):<sourcetext>([\s\S]*?)(?:\-*\^)/;
reError.test(sXmlError);
ÕýÔò±í´ïʽ²¶»ñµ½µÄµÚÒ»²¿·ÖÊý¾ÝÊÇ´íÎóÏûÏ¢£¬µÚ¶þ²¿·ÖÊÇÎļþÃû£¬µÚÈý²¿·ÖÊÇÐкţ¬µÚËIJ¿·ÖÊÇÐÐÄÚλÖ㬵ÚÎ岿·ÖÊÇÔ´Âë¡£Äã¿ÉÒÔʹÓÃÕâЩ½âÎöºóµÄÐÅÏ¢À´´´½¨×Ô¶¨ÒåµÄ´íÎóÏûÏ¢£º
var str = "An error occurred!! " +
"Description: " + RegExp.$1 + " " +
"File: " + RegExp.$2 + " " +
"Line: " + RegExp.$3 + " " +
"Line Position: " + RegExp.$4 + " " +
"Source Code: " + RegExp.$5;
alert(str);
Èç¹û·¢Éú´íÎó£¬ÄÇôalert()·½·¨»áÒÔÒ×ÓÚÔĶÁµÄ¸ñʽÔÚ¾¯¸æ¿òÖÐÀ´ÏÔʾÏà¹ØµÄ´íÎóÐÅÏ¢¡£
ÆÀÂÛ (0)
All