初學進階

handawei_5發表於2010-10-13

8.2.3 DOM的四個基本介面

在DOM介面規範中,有四個基本的介面:Document,Node,NodeList以及NamedNodeMap。在這四個基本介面中,Document介面是對文件進行操作的入口,它是從Node介面繼承過來的。Node介面是其他大多數介面的父類,象Documet,Element,Attribute,Text,Comment等介面都是從Node介面繼承過來的。NodeList介面是一個節點的集合,它包含了某個節點中的所有子節點。NamedNodeMap介面也是一個節點的集合,通過該介面,可以建立節點名和節點之間的一一對映關係,從而利用節點名可以直接訪問特定的節點。下面將對這四個介面分別做一些簡單的介紹。

  1. Document介面

Document介面代表了整個XML/HTML文件,因此,它是整棵文件樹的根,提供了對文件中的資料進行訪問和操作的入口。

由於元素、文字節點、註釋、處理指令等都不能脫離文件的上下文關係而獨立存在,所以在Document介面提供了建立其他節點物件的方法,通過該方法建立的節點物件都有一個ownerDocument屬性,用來表明當前節點是由誰所建立的以及節點同Document之間的聯絡。

在DOM樹中,Document介面同其他介面之間的關係如下圖所示:

由圖可以看出,Document節點是DOM樹中的根節點,也即對XML文件進行操作的入口節點。通過Docuemt節點,可以訪問到文件中的其他節點,如處理指令、註釋、文件型別以及XML文件的根元素節點等等。另外,從上圖我們還可以看出,在一棵DOM樹中,Document節點可以包含多個處理指令、多個註釋作為其子節點,而文件型別節點和XML文件根元素節點都是唯一的。

關於Document介面的IDL(Interface Definition Language介面定義語言)定義和其中一些比較常用的屬性和方法的詳細介紹在許多參考書都可以找到,我們將在後面結合實際例子給予介紹。

  1. Node介面

Node介面在整個DOM樹中具有舉足輕重的地位,DOM介面中有很大一部分介面是從Node介面繼承過來的,例如,Element、Attr、CDATASection等介面,都是從Node繼承過來的。在DOM樹中,Node介面代表了樹中的一個節點。一個典型的Node介面如下圖所示:

如圖所示,Node介面提供了訪問DOM樹中元素內容與資訊的途徑,並給出了對DOM樹中的元素進行遍歷的支援。

同樣,我們將在後面結合實際例子詳細說明Node介面的具體使用方法。

  1. NodeList介面

NodeList介面提供了對節點集合的抽象定義,它並不包含如何實現這個節點集的定義。NodeList用於表示有順序關係的一組節點,比如某個節點的子節點序列。另外,它還出現在一些方法的返回值中,例如GetNodeByName。

在DOM中,NodeList的物件是"live"的,換句話說,對文件的改變,會直接反映到相關的NodeList物件中。例如,如果通過DOM獲得一個NodeList物件,該物件中包含了某個Element節點的所有子節點的集合,那麼,當再通過DOM對Element節點進行操作(新增、刪除、改動節點中的子節點)時,這些改變將會自動地反映到NodeList物件中,而不需DOM應用程式再做其他額外的操作。

NodeList中的每個item都可以通過一個索引來訪問,該索引值從0開始。

  1. NamedNodeMap介面

實現了NamedNodeMap介面的物件中包含了可以通過名字來訪問的一組節點的集合。不過注意,NamedNodeMap並不是從NodeList繼承過來的,它所包含的節點集中的節點是無序的。儘管這些節點也可以通過索引來進行訪問,但這只是提供了列舉NamedNodeMap中所包含節點的一種簡單方法,並不表明在DOM規範中為NamedNodeMap中的節點規定了一種排列順序。

NamedNodeMap表示的是一組節點和其唯一名字的一一對應關係,這個介面主要用在屬性節點的表示上。
與NodeList相同,在DOM中,NamedNodeMap物件也是"live"的。

相關文章