為了讓大家更深入的了解和使用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“隔山打牛 ”的方式修改文檔內容。