共用方式為


XML 文件物件模型 (DOM)

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 檔案結構

在 XML 檔結構中,此圖中的每個圓形都代表稱為 XmlNode 對象的節點。 XmlNode 對像是 DOM 樹狀結構中的基本物件。 擴充 XmlNode 的 XmlDocument 類別支援在整個文件上執行作業的方法(例如,將它載入記憶體或將 XML 儲存至檔案。 此外,XmlDocument 提供一種方法來檢視及操作整個 XML 文件中的節點。 XmlNodeXmlDocument 都有效能和可用性增強功能,並具有下列方法與屬性:

  • 存取和修改 DOM 特定的節點,例如專案節點、實體參考節點等等。

  • 除了節點所包含的資訊之外,擷取整個節點,例如元素節點中的文字。

    備註

    如果應用程式不需要 DOM 所提供的結構或編輯功能, XmlReaderXmlWriter 類別會提供非快取、僅限轉送數據流存取 XML。 如需詳細資訊,請參閱 XmlReaderXmlWriter

Node 物件具有一組方法和屬性,以及基本和定義完善的特性。 其中一些特性如下:

  • 節點有單一父節點,父節點是其正上方的節點。 沒有父系的唯一節點是檔根目錄,因為它是最上層節點,並包含檔本身和檔片段。

  • 大部分節點可以有多個子節點,也就是它們正下方的節點。 以下是可以有子節點的節點類型清單。

    • 公文

    • DocumentFragment

    • 實體引用

    • 元素

    • 屬性

    XmlDeclarationNotationEntityCDATASectionTextCommentProcessingInstructionDocumentType 節點沒有子節點。

  • 位於相同層級的節點,由 bookpubinfo 節點在圖表中表示,稱為兄弟節點。

DOM 的其中一個特性是其處理屬性的方式。 屬性不是父母、子女和兄弟姐妹關係中的節點。 屬性會被視為元素節點的屬性,而且是由名稱和值組所組成。 例如,如果您的 XML 資料包含 format="dollar「與 項目 price相關聯,則這個字 format 是名稱,而屬性的值 formatdollar。 若要取得 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 串流,請使用 XmlReaderXmlWriter。 如果您需要使用游標模型和 XPath 的隨機存取,請使用 XPathNavigator 類別。

另請參閱