国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

如何處理Java里的DOM異常

2019-11-18 14:46:17
字體:
來源:轉載
供稿:網友

  在使用基于javaxml剖析器時,你經常要應付異常(exception)的處理。有些異常很輕易處理,而其他的要更困難一些。在本文里,我們會看一些在使用XML文檔時常見的異常,并探討一下如何處理好這些異常。

DOM異常

在使用DOM剖析器進行剖析操作的時候,XML文檔會被立即處理并保存在內存里。內存里的對象會被做一個文檔對象模型(Document Object Model)來參照??這基本上就是一種用于訪問底層XML文檔的面向對象的方法。在DOM里處理XML文檔的時候,很多東西都會出錯。

大多數DOM下的異常都是作為DOMException類的一個實例發生的。這個類支持15種不同的、具體的異常條件。每種條件都被指定為DOMException類的一個成員,叫做code。除了這個code成員,DOMException類還包含一組15個靜態成員,它們被用來確定異常的條件。

這15個條件是:

DOMSTRING_SIZE_ERR
HIERARCHY_REQUEST_ERR
INDEX_SIZE_ERR
INUSE_ATTRIBUTE_ERR
INVALID_access_ERR
INVALID_CHARACTER_ERR
INVALID_MODIFICATION_ERR
INVALID_STATE_ERR
NAMESPACE_ERR
NO_DATA_ALLOWED_ERR
NO_MODIFICATION_ALLOWED_ERR
NOT_FOUND_ERR
NOT_SUPPORTED_ERR
SYNTAX_ERR
WRONG_DOCUMENT_ERR
當DOMException出現的時候,假如不檢查異常對象里的code,那么你就不會知道到底是這些條件中的哪一個導致了這個異常。為了正確地處理這個異常,你將需要確定是哪個條件導致了這個異常。
Listing A顯示了一個Java程序,它創建新的DOM文檔失敗了:

Listing A: DOMFail.Java
import org.apache.xerces.dom.*;
import org.w3c.dom.*;

public class DOMFail {

public static void main(String[] args) {
Document doc = new DocumentImpl();
Element rootElement;

try{
rootElement = doc.createElement("Order");
rootElement.setAttribute("〈id", "109823");
doc.appendChild( rootElement );
} catch (DOMException e) {
switch(e.code) {
case DOMException.DOMSTRING_SIZE_ERR:
break;
case DOMException.HIERARCHY_REQUEST_ERR:
break;
case DOMException.INDEX_SIZE_ERR:
break;
case DOMException.INUSE_ATTRIBUTE_ERR:
break;
case DOMException.INVALID_ACCESS_ERR:
break;
case DOMException.INVALID_CHARACTER_ERR:
System.out.break;
case DOMException.INVALID_MODIFICATION_ERR:
break;
case DOMException.INVALID_STATE_ERR:
break;
case DOMException.NAMESPACE_ERR:
break;
case DOMException.NO_DATA_ALLOWED_ERR:
break;
case DOMException.NO_MODIFICATION_ALLOWED_ERR:
break;
case DOMException.NOT_FOUND_ERR:
break;
case DOMException.NOT_SUPPORTED_ERR:
break;
case DOMException.SYNTAX_ERR:
break;
case DOMException.WRONG_DOCUMENT_ERR:
break;
default:
System.out.println("Unknown DOM exception");
break;
}
}
}
}

要注重,我們使用了一種切換機制來確定到底滿足了哪個條件。這樣我們就可以很輕易地測試每個條件,直到我們找到正確的那個。

在這個例子里,我們已經在用于無效字符的條件里放置了一條消息。當你編譯并運行這個例子的時候,你會看到這樣一條信息:存在非法字符(There is an invalid character)。你會希望正確地處理每個條件,而不是將條件留作空白。
你可能想要提取出條件異常的處理(方法),并將它放置到它自己的方法里,甚至是它自己的類里。那樣的話,你就可以在你的代碼里放入更加簡單的異常處理機制。例如,我們可以創建一個叫做DOMExceptionHandler的新類,如Listing B所示:

Listing B: DOMExceptionHandler.Java
import org.w3c.dom.*;

public class DOMExceptionHandler {
public static void HandleDOMException(DOMException e) {
if (e != null) {
switch(e.code) {
case DOMException.DOMSTRING_SIZE_ERR:
break;
case DOMException.HIERARCHY_REQUEST_ERR:
break;
case DOMException.INDEX_SIZE_ERR:
break;
case DOMException.INUSE_ATTRIBUTE_ERR:
break;
case DOMException.INVALID_ACCESS_ERR:
break;
case DOMException.INVALID_CHARACTER_ERR:
System.out.println("There is an invalid character");
break;
case DOMException.INVALID_MODIFICATION_ERR:
break;
case DOMException.INVALID_STATE_ERR:
break;
case DOMException.NAMESPACE_ERR:
break;
case DOMException.NO_DATA_ALLOWED_ERR:
break;
case DOMException.NO_MODIFICATION_ALLOWED_ERR:
break;
case DOMException.NOT_FOUND_ERR:
break;
case DOMException.NOT_SUPPORTED_ERR:
break;
case DOMException.SYNTAX_ERR:
break;
case DOMException.WRONG_DOCUMENT_ERR:
break;
default:
System.out.println("Unknown DOM exception");
break;
}
}
}
}
既然我們有了用來處理DOM異常的專用處理器類,那么我們就可以從我們的處理代碼里調用它。Listing C里的代碼是對DOMFail類的一個修正,它使用了我們新的DOMExceptionHandler類:

Listing C: DOMFail2.Java
import org.apache.xerces.dom.*;
import org.w3c.dom.*;

public class DOMFail2 {

public static void main(String[] args) {
Document doc = new DocumentImpl();
Element rootElement;

try{
rootElement = doc.createElement("Order");
rootElement.setAttribute("〈id", "109823");
doc.appendChild( rootElement );
} catch (DOMException e) {
DOMExceptionHandler.HandleDOMException(e);
}
}
}

這個新的類要比我們原來的DOMFail類簡單得多。它還讓我們能夠更輕易地重新使用異常處理器的代碼。我們現在不用每次需要的時候才剪切和粘貼事件處理器代碼,而只是調用DOMExceptionHandler類就行了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 东乌珠穆沁旗| 侯马市| 泸州市| 垦利县| 绵阳市| 白山市| 乌审旗| 高台县| 浦江县| 德令哈市| 巴青县| 佛教| 巴东县| 怀宁县| 白银市| 婺源县| 青阳县| 漠河县| 遵化市| 舒兰市| 翼城县| 南充市| 安达市| 罗山县| 东至县| 申扎县| 绥中县| 青海省| 阿尔山市| 汶川县| 涿鹿县| 获嘉县| 民勤县| 惠州市| 武功县| 昆明市| 杭锦旗| 讷河市| 新乡市| 广水市| 禄丰县|