Visual C#中使用XML之實現DOM

 在前兩篇文章中咱們討論了XML文件的讀取和寫入,但都是基於流模型的解決方案,今天咱們就來談談在C#中如何實現DOM,DOM確實有它的不足,但在編程工做中它仍是不可或缺的技術。下面咱們來簡單瞭解一下DOM的相關知識。

  DOM的全稱是Document Object Model(文檔對象模型),它是來自W3C的官方標準,它容許按照W3C標準W3C DOM Level1和W3C DOM Level2的規範所定義的規則,經過編程來讀取,操縱和修改XML文檔。DOM的工做方式是:首先將XML文檔一次性的裝入內存,而後根據文檔中定義的元素和屬性在內存中建立一個「樹型結構」也就是一個文檔對象模型,這裏的含義實際上是把文檔對象化,文檔中每一個節點對應着模型中一個對象,而咱們都知道對象提供編程接口,因此在Application中咱們正是使用這組對象來訪問XML文檔進而操做XML文檔,下圖闡述了Application和DOM交互的過程:



  DOM既然是在內存中建立樹型結構視圖進而提供編程接口,那咱們就如下面這個XML片斷來講明DOM是如何建立樹型結構的:

程序員

<parent>
<child id=」123」>text here</child>
</parent>

  若是用DOM加載以上文檔,它將在內存中建立的樹型結構以下圖:



  DOM的關鍵在於它容許直接更新內存中的樹型結構,而沒必要重定向到其餘輸出,所以,添加、更新或刪除結構中信息的操做效率更高。而做爲程序員的咱們重要的是要了解DOM所提供的編程接口以實現對XML文檔進行操做,事實上,.NET Framework定義了一組類用於反映DOM的體系結構,下面來看一下.NET DOM的繼承結構:



  在上圖中全部弧角矩形中所包含的類描述了全部可能在XML文檔中出現的節點類型,而操做XML文檔不外乎是操做其中的節點,這些類又都是從XmlNode類派生而來,因此咱們今天的主題是討論XmlNode類和它的子類XmlDocument,下面對這些類作簡單的介紹:

  XmlNode類:

  該類是DOM中全部其餘節點的抽象基類,它定義全部在更低級的類中繼承或重寫的成員。它表示XML文檔中的單一節點,它提供了用於導航DOM樹型結構的基本方法和屬性,使用XmlNodeType枚舉器能夠枚舉其下的全部節點類型。如下介紹該類的部分屬性和方法:

  屬性:

  [C#]

  public virtual bool HasChildNodes {get;} 獲取一個值,該值指示當前節點是否有任何子節點

  public virtual XmlNodeList ChildNodes {get;} 獲取當前節點的全部子節點

  public virtual XmlNode FirstChild {get;} 獲取當前節點的第一個子級

  public virtual XmlNode LastChild {get;} 獲取當前節點的最後一個子級

  public virtual XmlNode ParentNode {get;} 獲取當前節點的父級

  public virtual XmlNode NextSibling {get;} 獲取當前節點的下一個兄弟節點

  public virtual XmlNode PreviousSibling {get;} 獲取當前節點的上一個兄弟節點

  public virtual string InnerText {get; set;} 獲取或設置當前節點及其全部子節點的文本內容的串聯值

  public virtual string InnerXml {get; set;} 獲取或設置僅表明當前節點的子節點的標記
 
  public virtual string OuterXml {get;} 獲取表示當前節點及其全部子節點的標記

  方法:

  public XmlNodeList SelectNodes(string); 選擇文檔中匹配 XPath 表達式的節點列表

  public XmlNode SelectSingleNode(string); 選擇文檔中匹配 XPath 表達式的第一個 XmlNode

  public virtual XmlNode AppendChild(XmlNode newChild) 將指定的節點添加到該節點的子節點列表的末尾

  public virtual XmlNode PrependChild(XmlNode newChild) 將指定的節點添加到該節點的子節點列表的開頭

  public virtual XmlNode RemoveChild(XmlNode oldChild) 移除指定的子節點

  public virtual XmlNode ReplaceChild(XmlNode newChild,XmlNode oldChild) 用 newChild 節點替換子節點 oldChild

  XmlNodeList類:

  該類表示XmlNode的有序集合,它有如下經常使用成員:

  Count——以整數形式返回XmlNodeList中的節點數

  ItemOf——搜索在指定索引處的節點

  GetEnumerator()——提供迭代遍歷節點列表的foreach樣式

  Item()——返回參數指定的索引處的節點

  XmlDocument類:

  XmlDocument類是XML文檔的.NET表示形式,它表明了內存中樹型結構的文檔節點(全部的節點都在文檔節點下),XmlDocument類包含全部的CreateXXX()方法,這些方法容許建立全部派生自XmlNode的類型的節點,一般將該類與XmlNode類一塊兒使用以完成對文檔的操做,該類有一個Load()方法用於加載XML文檔,該方法的一個重載版本容許從XmlTextReader加載文檔,這給咱們帶來的好處是在操做較大的文檔時咱們能夠先使用XmlTextReader過濾不相關的文檔部分,這樣即解決了DOM所帶來的資源損耗問題又能夠保留DOM對文檔操控的便利性,該類的Save()方法用於保存文檔。

  接下來用一個簡單的例子來講明在C#中如何實現DOM,照舊看代碼前先看下運行效果圖:

  LoadXML按紐用於加載XML文檔,LoadXMLReader按紐使用XmlTextReader加載文檔,SaveXML按紐保存文檔,SaveXMLWriter按紐將文檔保存到XmlTextWriter中,Add Product按紐添加節點,Replace Product按紐替換節點,Change Order按紐修改文檔,Remove Product Info按紐移除節點。  
相關文章
相關標籤/搜索