Latest web development tutorials

XML DOM 解析器錯誤

當Firefox 遇到解析器錯誤,它會載入一個包含錯誤的XML 文檔。


在Firefox 中的解析器錯誤

在您試圖打開一個XML 文檔時,就可能發生一個解析器錯誤(parser-error)。

與Internet Explorer 瀏覽器不同,如果Firefox 遇到錯誤,它會載入包含錯誤描述的XML 文檔中。

XML 錯誤文檔的根節點的名稱是"parsererror"。 這是用來檢查是否有錯誤。


XML 錯誤(XML Error)

在下面的代碼中,我們會讓解析器加載一個形式不良的XML 文檔。

(您可以在我們的XML教程中閱讀更多有關形式良好且有效的XML。)

實例

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, "&lt;");
document.write(errStr);
}
else
{
document.write("XML is valid");
}

嘗試一下»

查看XML文件: note_error.xml

實例解釋:

  1. 加載XML 文件
  2. 檢查根節點的節點名稱是否是"parsererror"
  3. 把錯誤字符串載入變量"errStr"
  4. 在錯誤字符串編寫為HTML 之前,把"<" 字符替換為"&lt;"

注意:實際上,只有Internet Explorer會用DTD檢查您的XML,Firefox不會。


跨瀏覽器的錯誤檢查

在這裡,我們創建了一個XML 加載函數,在Internet Explorer 和Firefox 中檢查解析器錯誤:

實例

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);
}

嘗試一下»

查看XML文件: note_error.xml

實例解釋- Internet Explorer:

  1. 第一行創建一個空的微軟XML 文檔對象。
  2. 第二行關閉異步加載,確保在文檔完全加載之前解析器不會繼續執行腳本。
  3. 第三行告知解析器加載名為"note_error.xml" 的XML 文檔。
  4. 如果parseError 對象的ErrorCode 屬性和"0" 不同,提醒錯誤並退出函數。
  5. 如果ErrorCode 屬性為"0",返回XML 文檔。

實例解釋- Firefox:

  1. 第一行創建一個空的XML文檔對象。
  2. 第二行關閉異步加載,確保在文檔完全加載之前解析器不會繼續執行腳本。
  3. 第三行告知解析器加載名為"note_error.xml" 的XML 文檔。
  4. 如果返回的文檔是一個錯誤的文檔,提醒錯誤並退出函數。
  5. 如果沒有,則返回XML 文檔。