XML DOM 教學課程登入
XML DOM 教學課程
作者:php.cn  更新時間:2022-04-13 15:27:56

DOM 解析器錯誤


XML DOM 解析器錯誤


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


在 Firefox 中的解析器錯誤

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

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

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


XML 錯誤(XML Error)

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

(您可以在我們的XML 教學中閱讀更多有關形式良好且有效的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

實例解釋:

  1. 載入XML 檔案

  2. 檢查根節點的節點名稱是否是"parsererror"

  3. 把錯誤字串載入變數"errStr"

  4. 在錯誤字串寫成HTML 之前,先把"<" 字元替換為"<"

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


跨瀏覽器的錯誤檢查

在這裡,我們建立了一個XML 載入函數,在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:

  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 文件。