文件對象模型(Document Object Model,DOM)是給 HTML 與 XML 文件使用的一組 API。它提供了文件的結構表述(representation),讓你可以更動其中的內容及可見物。其本質是建立網頁與 Script 或程序語言溝通的橋梁。
所有網頁設計師可操作及建立文件的屬性、方法及事件都以[對象]來展現(例如,document 就代表「文件本身」這個對象,table 對象則代表 HTML 的表格對象等等)。這些對象可以由當今大多數的瀏覽器以 Script 來取用。
DOM 最常被用以[與 JavaScript 溝通],也就是說雖然程序以 JavaScript? 寫成,但使用 DOM 來存取頁面及其元素。無論如何,DOM 本身是設計為一種獨立的程序語言,以一致的 API 存取文件的結構表述;是以雖然本站的焦點放在 JavaScript? 上,但 DOM 其實可以與[任何程序語言]共同運作。
[全球信息網協會](World Wide Web Consortium,W3C)建立了 [DOM] 的標準,稱之為「W3C DOM」。在當今主要瀏覽器都已正確實作的情況下,W3C DOM 使強大、跨瀏覽器的應用程序成真。這是眾網頁設計師在 Netscape 4 與 MSIE 多不相容的時代從未夢想過的事情。
DOM的結構:
??在DOM 中,我們將代表XML 文件的程序設計對象,稱為節點(nodes)。當Internet Explorer 5 處理被鏈接的XML 文件并儲存于DOM 中時,它會為XML 文件的每一個基本組件建立一個節點。這些基本組件包括了元素、屬性,與處理指令DOM 會使用不同形態的節點來代表不同形態的XML 組件。例如,元素是儲存在Element 節點中,而屬性則是儲存在Attribute 節點中。表格1 列出了這些節點類型最重要的部分。 節點形態 節點對象所代表的XML文件組件 節點名稱(nodeName 對象屬性) 節點的值(nodeValue 對象屬性) 文件(Document) 文件階層中的根節點(代表整個XML 文件) #document Null 元素(Element) 元素 元素形態名稱(例如,BOOK) null(包含在元素中的(Element)任何字符數據,是位在一個或多個子文字節點中) 文字(Text) 屬于由這個節點的父節點所代表的元素,屬性及實體的文字。 #text 父XML 組件的文字 屬性(Attribute) 屬性 (以及其它的名值對,像處理指令中的名字與值) 屬性名稱 (如Binding) 屬性值(例如hardcover) 處理指令 (Processing Instruction ) 處理指令(XML 宣告或自訂的處理指令) 處理指令的目標(例如xml) 除了目標之外整個處理指令的內容(例如,Version "1.0") 批注(Comment) 批注 #comment 在批注符號中的文字 CDATA 區段(CDATASection) CDATA 區段 #cdata-section CDATA 區段中的內容 文件類型(Document 文件形態宣告 出現在DOCTYPE 宣告中的根元素的名字(例如INVENTORY) Null 實體(Entity) DTD 中的實體宣告 實體名稱(例如image) null (實體值是位在子文字節點中) 標簽 DTD 中的標簽宣告 標簽名稱(例如BMP) >null (卷標的系統literal(Notation)是位在名為SYSTEM 的 子Attribute node中)
Type)上表中用來表示不同XML 文件組件的基本節點形態。這些類型的每一個節點都是一個程序設計對象,提供了存取相關組件的屬性與方法。
????你可以從節點中的nodeName 屬性獲得每個節點的名稱(詳列于表格9-1 中的第三欄)。這個名稱是以字符#起始,代表那些未在文件中命名的XML 組件節點的標準名稱。(例如,在XML文件中的批注并未命名。因此,DOM 將使用標準名稱#comment。)其它節點的名稱則是由指定到XML 文件中相對應組件的名稱衍生而來。(例如,代表形態BOOK 元素的元素節點也可以命名為BOOK。)
????你可以從節點的 nodeValue 屬性取得每個節點的節點值(列于表格9-1 中最后一欄)。如果XML組件擁有一個相關的值(例如,屬性),該值將會被儲存于節點的節點值中。如果XML 組件并沒有節點值(例如,元素),則DOM 將會把節點值設成null。在本章稍后,你將學到更多有關列于表格9.1 中各種節點類型的相關知識。
????DOM 會將XML 文件的節點建構成樹狀的階層結構,反映出XML 文件本身的階層結構。DOM將會建立一個單一文件節點來表示整個XML 文件,并將其視為階層結構的根節點。注意,XML元素的邏輯階層結構,包含了整個XML 文件,結構中的根節點,只是DOM 節點的階層結構的一個分枝。
每個節點,就像可程序化的對象,提供了屬性和方法,讓你可以存取、顯示、管理,和取得對應到XML 組件上的信息。例如,nodeName 和nodeValue 屬性(表1 所示)提供了元素的名稱及內含值。
????所有形態的節點共同分享一組公共的屬性與方法。這些屬性與方法一般是設計來偕同節點一起運作。表格2 列出了一些比較有用的共同屬性。在本章稍后你將獲得有關這些屬性的更多信息及范例。
屬性 |
描述 |
范例 |
attributes |
該節點的所有非屬性的子節點的NamedNodeMap 集合 |
AttributeNode =Element.attributes.getNamedItem ("Binding"); |
childNodes |
該節點的所有非屬性的子節點的NodeList 集合 |
FirstNode =Element.childNodes (0); |
dataType |
該節點的數據類型(只適用于某些類型Attribute 節點) |
AttributeType =Attribute.dataType; |
firstChild |
該節點的第一個非屬性的子節點 |
FirstChildNode =Element.firstChild; |
lastChild |
該節點的最后一個非屬性的子節點 |
LastChildNode =Element.lastChild; |
nextSibling |
與本節點位于同一層級的后繼前一節點 |
NextElement =Element.nextSibling; |
nodeName |
節點的名稱 |
ElementName =Element.nodeName; |
nodeType |
表示該節點類型的數值碼 |
NodeTypeCode =Node.nodeType; |
nodeTypeString |
包含該節點類型的字符串,以小寫字母撰寫(例如,"element"或"attribute") |
NodeTypeString=Node.nodeTypeString; |
nodeValue |
該節點的值(如果不含值則為null) |
AttributeValue =Attribute.nodeValue; |
ownerDocument |
包含本節點的文件的根Document 節點 |
Document =Node.ownerDocument; |
parentNode |
該節點的父節點(并不適用于Attribute 節點) |
ParentElement =Element.parentNode; |
previousSibling |
與本節點位于同一層級的先前節點 |
PreviousElement =Element.previousSibling; |
text |
該節點與其后裔節點的全部文字內容 |
AllCharacterData =Element.text; |
xml |
該節點與其后裔節點的全部XML 內容 |
XMLContent =Element.xml; |