XML 檔案物件模型 (DOM) 類別是 XML 檔案的記憶體內部表示法。 DOM 可讓您以程式設計方式讀取、作和修改 XML 檔。 XmlReader 類別也會讀取 XML;不過,它提供非快取、僅限轉送、只讀存取。 這表示沒有任何功能可編輯屬性或項目內容的值,或能夠插入和移除具有 XmlReader 的節點。 編輯是 DOM 的主要函式。 它是 XML 數據在記憶體中表示的常見和結構化方式,雖然實際 XML 數據是以線性方式儲存在檔案中或來自另一個物件時。 以下是 XML 數據。
輸入
<?xml version="1.0"?>
<books>
<book>
<author>Carson</author>
<price format="dollar">31.95</price>
<pubdate>05/01/2001</pubdate>
</book>
<pubinfo>
<publisher>MSPress</publisher>
<state>WA</state>
</pubinfo>
</books>
下圖顯示當此 XML 資料讀入 DOM 結構時,記憶體的結構方式。
XML 檔案結構
在 XML 檔結構中,此圖中的每個圓形都代表稱為 XmlNode 對象的節點。 XmlNode 對像是 DOM 樹狀結構中的基本物件。 擴充 XmlNode 的 XmlDocument 類別支援在整個文件上執行作業的方法(例如,將它載入記憶體或將 XML 儲存至檔案。 此外,XmlDocument 提供一種方法來檢視及操作整個 XML 文件中的節點。 XmlNode 和 XmlDocument 都有效能和可用性增強功能,並具有下列方法與屬性:
存取和修改 DOM 特定的節點,例如專案節點、實體參考節點等等。
除了節點所包含的資訊之外,擷取整個節點,例如元素節點中的文字。
Node 物件具有一組方法和屬性,以及基本和定義完善的特性。 其中一些特性如下:
節點有單一父節點,父節點是其正上方的節點。 沒有父系的唯一節點是檔根目錄,因為它是最上層節點,並包含檔本身和檔片段。
大部分節點可以有多個子節點,也就是它們正下方的節點。 以下是可以有子節點的節點類型清單。
公文
DocumentFragment
實體引用
元素
屬性
XmlDeclaration、Notation、Entity、CDATASection、Text、Comment、ProcessingInstruction 和 DocumentType 節點沒有子節點。
位於相同層級的節點,由 book 和 pubinfo 節點在圖表中表示,稱為兄弟節點。
DOM 的其中一個特性是其處理屬性的方式。 屬性不是父母、子女和兄弟姐妹關係中的節點。 屬性會被視為元素節點的屬性,而且是由名稱和值組所組成。 例如,如果您的 XML 資料包含 format="dollar「與 項目 price相關聯,則這個字 format 是名稱,而屬性的值 format 是 dollar。 若要取得 format="dollar" 的 價格 節點屬性,當游標位於 元素節點時,您可以呼叫 price 方法。 如需詳細資訊,請參閱 存取 DOM 中的屬性。
當 XML 讀入記憶體時,會建立節點。 不過,並非所有節點都是相同的類型。 XML 中的專案具有與處理指令不同的規則和語法。 因此,當讀取各種數據時,會將節點類型指派給每個節點。 此節點類型會決定節點的特性和功能。
如需記憶體中產生之節點類型的詳細資訊,請參閱 XML 節點的類型。 如需節點樹狀結構中建立之物件的詳細資訊,請參閱 將物件階層對應至 XML 數據。
Microsoft擴充了萬維網聯合會 (W3C) DOM 層級 1 和層級 2 中可用的 API,讓您更輕鬆地使用 XML 檔。 雖然完全支援 W3C 標準,但其他類別、方法和屬性除了可以使用 W3C XML DOM 完成的功能之外,也會新增功能。 新的類別可讓您存取關係型數據,提供您與 ADO.NET 數據同步處理的方法,同時將數據公開為 XML。 如需詳細資訊,請參閱 使用 XmlDataDocument 同步處理數據集。
DOM 最適合用來將 XML 資料讀入記憶體,以變更其結構、新增或移除節點,或修改節點所持有的數據,如同元素所包含的文字。 不過,其他類別比其他案例中的 DOM 更快。 若要快速、非快取且前向存取 XML 串流,請使用 XmlReader 和 XmlWriter。 如果您需要使用游標模型和 XPath 的隨機存取,請使用 XPathNavigator 類別。