首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 發現之旅第十講:文件物件模型(DOM)核心概念與實作

     編輯:關於C#

DOM 定義:跨平台、跨語言的結構化文件程式介面

文件物件模型(Document Object Model,DOM)是 W3C 制定的標準介面,定義程式與腳本如何動態存取、更新文件的內容、結構與樣式。DOM 將文件呈現為可程式化的物件樹狀結構,應用程式透過操作這些物件間接操作文件,處理結果可回寫呈現為有效頁面。DOM 的核心特性:平台中立、語言中立、可程式化、支援序列化/反序列化。

逐層解構 DOM 核心概念

文件與結構化文件

文件是以特定結構組織的資料封裝(如 Word 二進位檔、HTML 文字檔)。結構化文件具備層次化結構,抽象後可形成樹狀模型(HTML、XML)。純文字檔若無語法解析則無結構,經語法解析器賦予語義後轉為結構化文件(如 HTML DOM、XML DOM)。

程式介面(API)與代理模式

DOM 以可程式化物件形式暴露 API。每個 DOM 物件對應文件片段,物件屬性與文件片段屬性保持映射關係。應用程式讀寫物件屬性,經 DOM 內部映射實際讀寫文件片段。DOM 扮演應用軟體與結構化文件間的「代理」角色,實現「隔山打牛」式的文件操作。

有效頁面與跨平台優勢

處理後的結構化文件可渲染為有效頁面(瀏覽器繪製 HTML、XML 可程式化存取)。標準化 DOM(HTML/XML DOM)使 Java、.NET、JavaScript、VBA 等異構環境以相同流程操作文件,極大便利移植與資料交換。文件靜態存檔如「休眠」,經 DOM 載入即「喚醒」賦予生命。

以 XML DOM 為例深入剖析實作架構

.NET Framework 在 System.Xml 命名空間實作標準 XML DOM。

核心物件映射關係

  • XmlDocument:對應整份 XML 文件(根節點)。
  • XmlDeclaration:對應 <?xml ...?> 宣告。
  • XmlElement:對應 XML 元素(標籤)。
  • XmlText:對應純文字內容。
  • XmlAttribute:對應屬性。
  • XmlComment:對應註解。

XML 文件與 DOM 物件映射關係圖

開發者操作這些物件(如修改 XmlText.Value)即同步修改文件對應片段。XmlDocument 提供 CreateElement、CreateAttribute 等工廠方法建立新節點,掛入 ChildNodes 即完成文件修改;移除節點同理。

繼承體系與多型設計精髓

所有 XML DOM 類別繼承自 XmlNode,定義通用介面(ParentNode、ChildNodes、Attributes、Value、AppendChild、RemoveChild 等)。衍生類別再擴展特定功能:

XmlNode → XmlLinkedNode → XmlCharacterData → XmlText
XmlNode → XmlLinkedNode → XmlCharacterData → XmlComment
XmlNode → XmlAttribute
XmlNode → XmlElement

此多層繼承鏈體現物件導向設計功力:每層封裝特定行為(雙向連結、字元資料操作等),預留擴展點。開發者可安全以 XmlNode 強型別遍歷樹狀結構,但需注意同一 ChildNodes 集合中節點型別可能不同,強制轉型前必須型別判斷(is/as)。

解析器與序列化器

  • 載入:XmlDocument.Load() 內建以 XmlReader 為基礎的解析器,從檔案/串流讀取文字並自動建構 XmlDocument 為根的物件樹。
  • 儲存:XmlDocument.Save() 內建以 XmlWriter 為基礎的書寫器,將物件樹序列化為 XML 文字輸出至檔案/串流。

若無 DOM,開發者需自行對 XML 字串進行複雜字串剖析,開發極度困難且錯誤率高,XML 技術將難以普及。

DOM 程式設計特性歸納(內涵)

  1. 所有文件物件型別衍生自單一基礎型別,於基礎型別實作共通特性。
  2. 每個文件物件映射文件特定片段,修改物件等價修改文件片段。
  3. 文件物件可包含子節點,構成多層次物件樹狀結構。
  4. 存在唯一頂層物件(如 XmlDocument)代表整份文件,為應用程式唯一存取入口。
  5. DOM 可程式化,應用程式透過 DOM 存取結構化文件。
  6. 多數 DOM 支援完整序列化/反序列化(檔案雙向轉換)。

DOM 概念外延:泛化的樹狀物件模型

嚴格 DOM 複雜,實務上常簡化應用。.NET 基礎類庫中存在多種「非嚴格 DOM」結構:

  • 檔案系統 DOM:System.IO 下 DirectoryInfo(資料夾節點)、FileInfo(檔案節點),基類 FileSystemInfo。
  • 程式集 DOM:System.Reflection 下 Assembly(根)、Module、Type、MemberInfo 等。
  • WinForm DOM:System.Windows.Forms 下 Form(文件)、Control(基礎節點)。
  • ASP.NET 頁面 DOM:System.Web.UI 下 Page(文件)、Control(基礎節點)。
  • CodeDOM:System.CodeDom 以物件樹表達程式碼結構,支援動態生成原始碼。

凡呈現樹狀物件結構、節點具屬性與子節點集合、支援遍歷與修改者,皆可視為廣義 DOM。掌握 DOM 設計思想,可應用於電子病歷 DOM、CRM 客戶 DOM 等領域模型建構,提昇軟體設計抽象層次。

結語

DOM 是兼具理論深度與實務價值的軟體設計技術。優秀的 DOM 設計邏輯清晰、符合直覺、為業務資料的高度抽象。深入研習 DOM 不僅能掌握 XML/HTML 處理核心技術,更能鍛鍊物件導向設計基本功,拓寬架構視野。本講為「C# 發現之旅」系列終結篇,期許讀者持續探索 C# 未知領域,精進軟體開發綜合能力。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved