文件物件模型 (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 樹狀結構中的基本物件。擴充 XmlNodeXmlDocument 類別支援在文件上整體執行作業的方法,例如,將它載入記憶體或將 XML 儲存至檔案。此外,XmlDocument 提供一個方法來檢視和操作整個 XML 文件中的節點。XmlNodeXmlDocument 都加強效能和可用性,而且有方法和屬性可以:

  • 存取和修改 DOM 特定的節點,例如項目節點、實體參考節點等等。
  • 除了節點所包含的資訊之外,擷取整個節點,例如項目節點中的內容。
    注意   如果應用程式不需要 DOM 所提供的結構或編輯功能,XmlReaderXmlWriter 類別會提供對 XML 的無快取、順向資料流存取。如需詳細資訊,請參閱使用 XmlReader 讀取 XML使用 XmlWriter 寫入 XML

Node 物件有一組方法和屬性,以及基本且完整定義的特性。這些特性的其中一些是:

  • 節點有單一父節點,父節點是直接在上方的節點。唯一沒有父代的節點是文件根,因為它是最上層的節點且包含文件本身,以及文件片段。
  • 大多數的節點可以有多重子節點,就是直接在下方的節點。下列是可以有子節點的節點類型清單。
    • Document
    • DocumentFragment
    • EntityReference
    • Element
    • Attribute

    XmlDeclarationNotationEntityCDATASectionTextCommentProcessingInstructionDocumentType 節點都沒有子節點 (Child Node)。

  • 相同層級的節點,在圖表中以 bookpubinfo 節點呈現,是同層級 (Sibling)。

DOM 的其中一項特性是它處理屬性的方式。屬性不是父系-子系和同層級關係的節點。屬性 (Attribute) 被當成項目節點的屬性 (Property),由一個名稱和一個值配對組成。例如,如果 XLM 資料包含與項目 price 相關的 format="dollar",則 format 這個字即是名稱,而 format 屬性的值是 dollar。若要擷取 price 節點的 format="dollar" 屬性,則當游標位於 price 項目節點時,請呼叫 GetAttribute 方法。如需詳細資訊,請參閱存取 DOM 中的屬性

當 XML 讀入記憶體時,就會建立節點。然而,並非所有的節點都是相同類型。XML 中的項目的規則和語法與處理指示中的不同。因此讀取不同的資料時,就會指派一種節點類型給每個節點。這個節點類型會決定節點的特性和功能。

如需記憶體內所產生之節點類型的詳細資訊,請參閱 XML 節點的類型。如需在節點樹狀結構中建立之物件的詳細資訊,請參閱將物件階層架構對應至 XML 資料

Microsoft 已經擴充可以在 W3C DOM 層級 1 和層級 2 中使用的 API,讓它能輕鬆地使用 XML 文件。在完全支援 W3C 標準的同時,其他的類別、方法和屬性增加比使用 W3C XML DOM 所能做的更多的功能。新類別可讓您存取關連資料,提供您同步處理 ADO.NET 資料的方法,同時將資料公開成 XML。如需詳細資訊,請參閱使用 XmlDataDocument 同步處理 DataSet

DOM 對於將 XML 資料讀入記憶體以變更它的結構、加入或移除節點,或修改在項目所包含之內容中的節點所儲存的資料時最有用。但是,在其他案例中,可使用其他比 DOM 更快速的類別。對於快速、無快取順向資料流的 XML 存取,請使用 XmlReaderXmlWriter。如果您需要具游標模式和 XPath 的隨機存取,請使用 XPathNavigator 類別。

請參閱

XML 節點的類型 | 將物件階層架構對應至 XML 資料

posted on 2006-09-12 09:22  老夫狂傲江湖  阅读(210)  评论(0)    收藏  举报