為了讓大家更深入的瞭解和使用C#,我們將開始這一系列的主題為“C#發現之旅 ”的技術講座。考慮到各位大多是進行WEB資料庫開發的,而所謂發現就是發現我們所 不熟悉的領域,因此本系列講座內容將是C#在WEB資料庫開發以外的應用。目前規劃的主要內 容是圖形開發和XML開發,並計劃編排了多個課程。在未來的C#發現之旅中,我們按照由淺入 深,循序漸進的步驟,一起探索和發現C#的其他未知的領域,更深入的理解和掌握使用C#進 行軟體開發,拓寬我們的視野,增強我們的軟體開發綜合能力。
課程說明
本 課程專門講述文件物件模型的概念,理論性比較強,需要仔細思考,而且沒有示範程式,本課 程是C#發現之旅系列課程的終結篇,不過不排除我今後推出C#發現之旅續集的可能性。
文件物件模型定義
文件物件模型英文名為 Document Object Model , 簡稱 DOM,它是一種比較重要的軟體設計模式,不是編程技巧。可以這麼說,平生不認DOM,便稱 英雄也枉然,大家應當多多瞭解它的能力。
文件物件模型是物件導向編程技術的集中 體現,若沒有完整的物件導向編程思想,是不可能理解和開發文件物件模型,若開發人員能開 發出文件物件模型,那就說明他/她比較完整的理解和掌握了物件導向編程思想。
W3C 國際組織對文件物件模型是這樣定義的(摘自 http://www.w3.org/DOM/ )
The Document Object Model is a platform- and language-neutral interface that will allow programs and scripts to dynamically access and update the content, structure and style of documents. The document can be further processed and the results of that processing can be incorporated back into the presented page. This is an overview of DOM-related materials here at W3C and around the web.
以 我個人的英文水平翻譯如下
文件物件模型是一種平台或語言中立的介面,程式或指令碼 能利用它來訪問和更新結構化的文檔。這些文檔可以被進一步的處理,處理結果可以組成一 個有效頁面。這是W3C對web上的文件物件模型原理的一般看法。
文檔
我們來 逐步理解這個定義。首先什麼是文檔。文檔就是以一種結構組織在一起的資料包。比如MS Word 文檔就是一種文檔,它包含了很多字元,圖片,段落資料,並使用特定的組織圖儲存 在一個二進位檔案中。 比如HTML文檔,它也包含了文字,圖片,連結,表單資料,並可以按 照公開的HTML文法組成一種階層儲存在一個字串或文字檔中。
結構化文檔
其次,什麼是結構化的文檔,很多文檔它的內容組織呈現一種層次化的結構。即它的 內容抽象化可以組成一種樹狀結構,比如HTML文檔,XML文檔。
對於普通的文字文件 ,從開發人員看來,它就是一個字串,其中各個字元或子字串之間是沒有相互關係的。此 時普通文字文件就不是結構化的文檔,若將某種支援階層的文法分析強加到這個文本文 檔時,則該文字文件就成了一個層次化的文檔。
HTML文檔若沒有進行HTML文法解釋, 則它就是一個平淡無奇的純文字文檔,就是一個普通的字串,若將HTML文法強加到這個字 符串,則這個純文字文檔立即成為具有相當複雜度的結構化文檔。同樣的道理,XML檔案, SQL語句等純文字文檔,在它沒有解釋前是一個普通的字串,解釋之後就成為大有用途的 XMLDOM,SQLDOM。
編程介面
DOM是一種介面或平台,對於軟體開發人員來說,這 種所謂的介面或平台就是編程介面(API),API有很多種,有直接調用函數的介面方式,比 如傳統Win32API函數,還有一種是暴露可程式化對象,編程對象有公開的屬性方法或事件,比 如COM介面或.NET類庫介面。還有基於WEB的WebService的編程介面。一般而言,對於DOM,編 程介面就表現為可程式化對象的編程介面,就是DOM向外發布若干個可程式化對象,別的應用程式 或者指令碼語言可以調用這些可程式化對象的公開成員。
DOM的一個重要特性就是應用程 序或者指令碼程式能利用它來訪問和更新結構化文檔。這個意思是說,DOM向外提供若干個可編 程對象,這些對象內部使用種種手段,保證它和結構化文檔中的某個部分保持對應關係,特 別是對象的屬性和文檔片斷的屬性保持映射關係。而外部程式獲得可程式化對象的屬性,經過 DOM內部的映射關係,實際上就等價於獲得某個文檔片斷的某個屬性,外部程式修改可程式化對 象的屬性,經過內部的映射關係,最終導致某個文檔片斷的屬性的修改。因此DOM是應用軟體 和結構化文檔之間的代理,應用軟體使用DOM透視出文檔的內容,也通過DOM“隔山打牛 ”的方式修改文檔內容。