XML DOM 解析器錯誤
當(dāng) Firefox 遇到解析器錯誤,它會載入一個包含錯誤的 XML 文檔。
在 Firefox 中的解析器錯誤
在您試圖打開一個 XML 文檔時,就可能發(fā)生一個解析器錯誤(parser-error)。
與 Internet Explorer 瀏覽器不同,如果 Firefox 遇到錯誤,它會載入包含錯誤描述的 XML 文檔中。
XML 錯誤文檔的根節(jié)點的名稱是 "parsererror"。這是用來檢查是否有錯誤。
XML 錯誤(XML Error)
在下面的代碼中,我們會讓解析器加載一個形式不良的 XML 文檔。
(您可以在我們的 XML 教程中閱讀更多有關(guān)形式良好且有效的 XML。)
實例
<html> <body> <script> xmlDoc=document.implementation.createDocument("","",null); xmlDoc.async=false; xmlDoc.load("note_error.xml"); if (xmlDoc.documentElement.nodeName=="parsererror") { errStr=xmlDoc.documentElement.childNodes[0].nodeValue; errStr=errStr.replace(/</g, "<"); document.write(errStr); } else { document.write("XML is valid"); } </script> </body> </html>
運行實例 ?
點擊 "運行實例" 按鈕查看在線實例
查看 XML 文件:note_error.xml
實例解釋:
加載 XML 文件
檢查根節(jié)點的節(jié)點名稱是否是 "parsererror"
把錯誤字符串載入變量 "errStr"
在錯誤字符串編寫為 HTML 之前,把 "<" 字符替換為 "<"
注意:實際上,只有 Internet Explorer 會用 DTD 檢查您的 XML,F(xiàn)irefox 不會。
跨瀏覽器的錯誤檢查
在這里,我們創(chuàng)建了一個 XML 加載函數(shù),在 Internet Explorer 和 Firefox 中檢查解析器錯誤:
實例
<html> <head> <script> function loadXMLDocErr(dname) { try //Internet Explorer { xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); xmlDoc.async=false; xmlDoc.load(dname); if (xmlDoc.parseError.errorCode != 0) { alert("Error in line " + xmlDoc.parseError.line + " position " + xmlDoc.parseError.linePos + "\nError Code: " + xmlDoc.parseError.errorCode + "\nError Reason: " + xmlDoc.parseError.reason + "Error Line: " + xmlDoc.parseError.srcText); return(null); } } catch(e) { try //Firefox { xmlDoc=document.implementation.createDocument("","",null); xmlDoc.async=false; xmlDoc.load(dname); if (xmlDoc.documentElement.nodeName=="parsererror") { alert(xmlDoc.documentElement.childNodes[0].nodeValue); return(null); } } catch(e) {alert(e.message)} } try { return(xmlDoc); } catch(e) {alert(e.message)} return(null); } </script> </head> <body> <script> xmlDoc=loadXMLDocErr("note_error.xml"); </script> </body> </html>
運行實例 ?
點擊 "運行實例" 按鈕查看在線實例
查看 XML 文件:note_error.xml
實例解釋 - Internet Explorer:
第一行創(chuàng)建一個空的微軟 XML 文檔對象。
第二行關(guān)閉異步加載,確保在文檔完全加載之前解析器不會繼續(xù)執(zhí)行腳本。
第三行告知解析器加載名為 "note_error.xml" 的 XML 文檔。
如果 parseError 對象的 ErrorCode 屬性和 "0" 不同,提醒錯誤并退出函數(shù)。
如果 ErrorCode 屬性為 "0",返回 XML 文檔。
實例解釋 - Firefox:
第一行創(chuàng)建一個空的XML文檔對象。
第二行關(guān)閉異步加載,確保在文檔完全加載之前解析器不會繼續(xù)執(zhí)行腳本。
第三行告知解析器加載名為 "note_error.xml" 的 XML 文檔。
如果返回的文檔是一個錯誤的文檔,提醒錯誤并退出函數(shù)。
如果沒有,則返回 XML 文檔。