XML DOM 解析器錯(cuò)誤


當(dāng) Firefox 遇到解析器錯(cuò)誤,它會(huì)載入一個(gè)包含錯(cuò)誤的 XML 文檔。


在 Firefox 中的解析器錯(cuò)誤

在您試圖打開(kāi)一個(gè) XML 文檔時(shí),就可能發(fā)生一個(gè)解析器錯(cuò)誤(parser-error)。

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

XML 錯(cuò)誤文檔的根節(jié)點(diǎn)的名稱是 "parsererror"。這是用來(lái)檢查是否有錯(cuò)誤。


XML 錯(cuò)誤(XML Error)

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

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

實(shí)例

<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>

運(yùn)行實(shí)例 ?

點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例

查看 XML 文件:note_error.xml

實(shí)例解釋:

  1. 加載 XML 文件

  2. 檢查根節(jié)點(diǎn)的節(jié)點(diǎn)名稱是否是 "parsererror"

  3. 把錯(cuò)誤字符串載入變量 "errStr"

  4. 在錯(cuò)誤字符串編寫(xiě)為 HTML 之前,把 "<" 字符替換為 "&lt;"

注意:實(shí)際上,只有 Internet Explorer 會(huì)用 DTD 檢查您的 XML,F(xiàn)irefox 不會(huì)。


跨瀏覽器的錯(cuò)誤檢查

在這里,我們創(chuàng)建了一個(gè) XML 加載函數(shù),在 Internet Explorer 和 Firefox 中檢查解析器錯(cuò)誤:

實(shí)例

<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>

運(yùn)行實(shí)例 ?

點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例

查看 XML 文件:note_error.xml

實(shí)例解釋 - Internet Explorer:

  1. 第一行創(chuàng)建一個(gè)空的微軟 XML 文檔對(duì)象。

  2. 第二行關(guān)閉異步加載,確保在文檔完全加載之前解析器不會(huì)繼續(xù)執(zhí)行腳本。

  3. 第三行告知解析器加載名為 "note_error.xml" 的 XML 文檔。

  4. 如果 parseError 對(duì)象的 ErrorCode 屬性和 "0" 不同,提醒錯(cuò)誤并退出函數(shù)。

  5. 如果 ErrorCode 屬性為 "0",返回 XML 文檔。

實(shí)例解釋 - Firefox:

  1. 第一行創(chuàng)建一個(gè)空的XML文檔對(duì)象。

  2. 第二行關(guān)閉異步加載,確保在文檔完全加載之前解析器不會(huì)繼續(xù)執(zhí)行腳本。

  3. 第三行告知解析器加載名為 "note_error.xml" 的 XML 文檔。

  4. 如果返回的文檔是一個(gè)錯(cuò)誤的文檔,提醒錯(cuò)誤并退出函數(shù)。

  5. 如果沒(méi)有,則返回 XML 文檔。