DOM是以層次結構組織的節點或信息片斷的集合。這個層次結構允許開發人員在樹中導航尋找特定信息。分析該結構通常需要加載整個文檔和構造層次結構,然後才能做任何工作。由於它是基於信息層次的,因而 DOM 被認為是基於樹或基於對象的。
對於特別大的文檔,解析和加載整個文檔可能很慢且很耗資源,因此使用其他手段來處理這樣的數據會更好。這些基於事件的模型,比如 Simple API for XML(SAX),適用於處理數據流,即隨著數據的流動而依次處理數據。基於事件的 API 消除了在內存中構造樹的需要,但是卻不允許開發人員實際更改原始文檔中的數據。
SAX等模型會從頭至尾的順序解析整個XML文檔,當遇到壹個節點的開始或或者結束時,會產生壹個時間,程序員可以註冊事件處理函數以對各個節點進行處理。
另壹方面,DOM 還提供了壹個 API,允許開發人員添加、編輯、移動或刪除樹中任意位置的節點,從而創建壹個引用程序。這個模型就是基於樹型數據結構的,他在使用之前必須加載整個文檔或者至少是結構良好的文檔片段
解析器是壹個軟件應用程序,設計用於分析文檔(這裏是指 XML 文件),以及做壹些特定於該信息的事情。在諸如 SAX 這樣基於事件的 API 中,解析器將向某種監聽器發送事件。在諸如 DOM 這樣基於樹的 API 中,解析器將在內存中構造壹顆數據樹。
作為 API 的 DOM
從 DOM Level 1 開始,DOM API 包含了壹些接口,用於表示可從 XML 文檔中找到的所有不同類型的信息。它還包含使用這些對象所必需的方法和屬性。
Level 1 包括對 XML 1.0 和 HTML 的支持,每個 HTML 元素被表示為壹個接口。它包括用於添加、編輯、移動和讀取節點中包含的信息的方法,等等。然而,它沒有包括對 XML 名稱空間(XML Namespace)的支持,XML 名稱空間提供分割文檔中的信息的能力。
DOM Level 2 添加了名稱空間支持。Level 2 擴展了 Level 1,允許開發人員檢測和使用可能適用於某個節點的名稱空間信息。Level 2 還增加了幾個新的模塊,以支持級聯樣式表、事件和增強的樹操作。
當前正處於定稿階段的 DOM Level 3 包括對創建 Document 對象(以前的版本將這個任務留給實現,使得創建通用應用程序很困難)的更好支持、增強的名稱空間支持,以及用來處理文檔加載和保存、驗證以及 XPath 的新模塊;XPath 是在 XSL 轉換(XSL Transformation)以及其他 XML 技術中用來選擇節點的手段。
DOM 的模塊化意味著作為開發人員,您必須知道自己希望使用的特性是否受正在使用的 DOM 實現所支持。
確定特性可用性
DOM 推薦標準的模塊性質允許實現者挑選將要包括到產品中的部分,因而在使用某個特定的特性之前,首先確定該特性是否可用可能是必要的。本教程僅使用 DOM Level 2 Core API,不過在著手您自己的項目時,了解如何能夠檢測特性是有所幫助的。
DOM 中定義的接口之壹就是 DOMImplementation。通過使用 hasFeature() 方法,您可以確定某個特定的特性是否受支持。DOM Level 2 中不存在創建DOMImplementation 的標準方法,不過下面的代碼將展示如何使用 hasFeature() 來確定 DOM Level 2 樣式表模塊在某個 Java 應用程序中是否受支持。