DOM和SAX(Document Object Model)

基於XML的程序結構如圖

DOM、SAX是最主要的兩種編程接口規範,Apache Xerces提供DOM和SAX API,支持多種語言

DOM概述

DOM是一個比XML更早的概念,例如IE中的DOM,可以通過JavaScript進行操作HTML
W3C的DOM可以看作是一個平臺或語言的界面,允許程序和腳本動態地訪問及更新文檔的內容、結構、腳本程序。也就是說,DOM是一組API,它把XML文檔作爲對象,接口中包含了對文檔的操作的屬性和方法定義
DOM將XML文檔看作樹,根元素對應樹的根節點,子元素對應子節點。利用DOM處理XML文檔時,DOM處理器先把XML文檔加載到內存中,在內存中,XML文檔的邏輯結構以樹的形式存在,對XML的操作都是建立在樹的結構上的
DOM有3個版本,即DOM Level 1、2和3,已被MSXML等處理器支持的是1和2

DOM的結構

XML的所有一切都可以看作節點,包括文檔本身、XML聲明、註釋、處理指令、根元素、子元素、元素的內容等

XML文檔具有層次結構
根節點:對應整個XML文檔,也叫文檔節點
根元素:僅被文檔節點飽含,也叫文檔元素
注:屬性節點不是元素節點的子節點

文檔節點:是DOM樹的根節點,根元素節點是它的一個子節點,接口爲Document
元素節點:表示XML元素,可擁有子元素、文本子節點,是唯一具有屬性的節點,接口爲Element
文本節點:只能包含文本內容(或空白),可以使元素文本或屬性值,接口爲Text
屬性節點:代表元素的屬性,接口爲Attr DOM樹中實際沒有屬性節點,因爲屬性是依附於元素的
DOM的優缺點
優點:
整個文檔結構和數據都在內存中,可以隨時按照節點間的關係訪問數據
節點的移動、插入、刪除,結構和數據的修改,都在內存中進行
缺點:
受內存容量限制,不能處理大的文檔
由於沒有索引機制,處理效率較低
DOM的接口及實現
 W3C的DOM是用IDL(接口描述語言)描述的與操作系統和程序設計語言無關的接口規範,並未規定實現這一規範的類(Class)或結構(Structure)
 各軟件廠商以軟件包的形式實現DOM接口:
MSXML:支持DOM Level 2.0 core
JAXP:http://java.sun.com/j2se
DOM4j:可以看作JAXP的簡化版http://www.dom4j.org

DOM程序設計

主要有三種用途:
處理XML文檔:將XML加載至內存,以節點方式分析、處理XML文檔,輸出或保存XML文檔
驗證XML文檔:將XML加載至內存,使用XML DTD或Schema驗證XML文檔
執行XSLT轉換:加載XML、XSLT文檔,並執行XSLT轉換

SAX概述

SAX(Simple API for XML)採用流機制讀取、分析XML文檔。SAX由SAX項目組(http://www.saxproject.org)維護 ,Java源代碼可到http://sourceforge.net下載
SAX是事件驅動的,包括解析器和處理器兩部分。解析器對XML流進行解析,將元素、屬性、文本、註釋等作爲“事件”順序交由處理器進行處理。
SAX處理XML數據涉及以下步驟:
創建一個事件處理程序
創建 SAX 解析器
向解析器分配事件處理程序
解析文檔,同時向事件處理程序發送每個事件
SAX在讀取XML流的同時處理流
例如,對於XML文檔:
<?xml version="1.0"?>
<samples>
 <server>UNIX</server>
 <monitor>color</monitor>
</samples>
分析該XML流時,一般將產生以下事件:
Start document
Start element (samples)
Characters (white space)
Start element (server)
Characters (UNIX)
End element (server)
Characters (white space)
Start element (monitor)
Characters (color)
End element (monitor)
Characters (white space)
End element (samples)
SAX API 允許開發人員捕捉這些事件並對它們作出反應
SAX解析器和處理器的接口定義位於org.xml.sax包中
XML解析器(XMLReader接口)
 允許應用程序設置、查詢解析器的功能和特性,註冊處理文檔的事件處理器,啓動文檔解析
事件處理器(ContentHandler接口)
 SAX應用程序負責提供實現XMLReader接口的解析器類,其中事件處理器是要實現的主要的處理器之一,用於獲得解析事件
錯誤處理器(ErrorHandler接口)
 要實現定製的錯誤處理,就必須實現該接口

SAX的特徵

流式處理機制,邊讀取便分析,內存中只保留XML片斷
對內存要求低,可處理大型文檔
可隨時中斷處理,而不必等待全部XML處理完畢,避免加載不必要的數據,可充分利用內存資源
SAX處理器是順序的,已經分析過的數據將不能再反覆處理,不適合修改或隨機訪問XML文檔

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章