25、DOM的全稱是Document Object Model,也即文檔對象模型。在應用程序中,基於DOM的XML分析器將一個XML文檔轉換成一個對象模型的集合(通常稱DOM樹),應用程序正是通過對這個對象模型的操作,來實現對XML文檔數據的操作。通過DOM接口,應用程序可以在任何時候訪問XML文檔中的任何一部分數據,因此,這種利用DOM接口的機制也被稱作隨機訪問機制。
DOM接口提供了一種通過分層對象模型來訪問XML文檔信息的方式,這些分層對象模型依據XML的文檔結構形成了一棵節點樹。無論XML文檔中所描述的是什麼類型的信息,即便是制表數據、項目列表或一個文檔,利用DOM所生成的模型都是節點樹的形式。也就是說,DOM強制使用樹模型來訪問XML文檔中的信息。由於XML本質上就是一種分層結構,所以這種描述方法是相當有效的。
26、SAX的全稱是Simple APIs for XML,也即XML簡單應用程序接口。與DOM不同,SAX提供的訪問模式是一種順序模式,這是一種快速讀寫XML數據的方式。當使用SAX分析器對XML文檔進行分析時,會觸發一系列事件,並激活相應的事件處理函數,應用程序通過這些事件處理函數實現對XML文檔的訪問,因而SAX接口也被稱作事件驅動接口。27、對於XML應用開發來說,DOM就是一個對象化的XML數據接口,一個與語言無關、與平台無關的標准接口規范。它定義了HTML文檔和XML文檔的邏輯結構,給出了一種訪問和處理Html文檔和XML文檔的方法。利用DOM,程序開發人員可以動態地創建文檔,遍歷文檔結構,添加、修改、刪除文檔內容,改變文檔的顯示方式等等。可以這樣說,文檔代表的是數據,而DOM則代表了如何去處理這些數據。無論是在浏覽器裡還是在浏覽器外,無論是在服務器上還是在客戶端,只要有用到XML的地方,就會碰到對DOM的應用。
作為W3C的標准接口規范,目前,DOM由三部分組成,包括:核心(core)、HTML和XML。核心部分是結構化文檔比較底層對象的集合,這一部分所定義的對象已經完全可以表達出任何HTML和XML文檔中的數據了。HTML接口和XML接口兩部分則是專為操作具體的Html文檔和XML文檔所提供的高級接口,使對這兩類文件的操作更加方便。
目前,DOM有兩個版本,一個是由W3C於1998年8月18日通過的DOM Level 1,另一個則是正在制定過程中的DOM Level 2,W3C已於2000年3月7日通過了DOM Level 2的候選推薦版本。28、在DOM接口規范中,有四個基本的接口:Document,Node,NodeList以及NamedNodeMap。在這四個基本接口中,Document接口是對文檔進行操作的入口,它是從Node接口繼承過來的。Node接口是其他大多數接口的父類,象Documet,Element,Attribute,Text,Comment等接口都是從Node接口繼承過來的。NodeList接口是一個節點的集合,它包含了某個節點中的所有子節點。NamedNodeMap接口也是一個節點的集合,通過該接口,可以建立節點名和節點之間的一一映射關系,從而利用節點名可以直接訪問特定的節點。
29、Document接口代表了整個XML/Html文檔,因此,它是整棵文檔樹的根,提供了對文檔中的數據進行訪問和操作的入口。
由於元素、文本節點、注釋、處理指令等都不能脫離文檔的上下文關系而獨立存在,所以在Document接口提供了創建其他節點對象的方法,通過該方法創建的節點對象都有一個ownerDocument屬性,用來表明當前節點是由誰所創建的以及節點同Document之間的聯系。
Document節點是DOM樹中的根節點,也即對XML文檔進行操作的入口節點。通過Docuemt節點,可以訪問到文檔中的其他節點,如處理指令、注釋、文檔類型以及XML文檔的根元素節點等等。另外,從上圖我們還可以看出,在一棵DOM樹中,Document節點可以包含多個處理指令、多個注釋作為其子節點,而文檔類型節點和XML文檔根元素節點都是唯一的。
30、Node接口在整個DOM樹中具有舉足輕重的地位,DOM接口中有很大一部分接口是從Node接口繼承過來的,例如,Element、Attr、CDATASection等接口,都是從Node繼承過來的。在DOM樹中,Node接口代表了樹中的一個節點。
31、NodeList接口提供了對節點集合的抽象定義,它並不包含如何實現這個節點集的定義。NodeList用於表示有順序關系的一組節點,比如某個節點的子節點序列。另外,它還出現在一些方法的返回值中,例如GetNodeByName。
在DOM中,NodeList的對象是"live"的,換句話說,對文檔的改變,會直接反映到相關的NodeList對象中。例如,如果通過DOM獲得一個NodeList對象,該對象中包含了某個Element節點的所有子節點的集合,那麼,當再通過DOM對Element節點進行操作(添加、刪除、改動節點中的子節點)時,這些改變將會自動地反映到NodeList對象中,而不需DOM應用程序再做其他額外的操作。
NodeList中的每個item都可以通過一個索引來訪問,該索引值從0開始。