XML:XML是一種跨語言,跨平臺的數據存儲格式,能夠在任何兩個應用程序間共享數據,這兩個程序可能使用不一樣的語言編寫,由不一樣的公司構建,運行在不一樣的操做系統上.數據庫
XML自己是一個文本文件,用於存儲數據的,有人把XML當成小型數據庫來使用.編程
DOM:Document Object Model簡稱爲DOM,用W3C的話說,DOM是一種容許程序或腳本動態地訪問更新文檔內容,結構和樣式的,獨立於平臺和語言的規範化接口.編程語言
通俗的說,DOM就是一種規範.函數
DOM的規範級別:spa
1.DOM級別1(Level 1)操作系統
DOM級別1於1998年10月1日成爲W3C推薦標準.專一於HTML和XML文檔模型.它含有文檔導航和處理功能.對象
2.DOM級別2(Level 2)排序
DOM級別2規範發佈於2000年11月13日.DOM級別2對DOM級別1添加了樣式表對象模型,並定義了操做附於文檔之上的樣式信息的功能性.DOM級別2同時還定義了一個事件模型,並提供了對XML命名空間的支持.繼承
3.DOM級別3(Level 3)遞歸
DOM級別3規定了內容模型(DTD和Schemas)和文檔驗證.同時規定了文檔加載和保存,文檔查看,文檔格式化和關鍵事件.DOM級別3創建於DOM級別2之上.
DOM的做用:DOM爲編程語言提供一組與平臺無關的類和接口(API),編程者可使用DOM中的API來對XML進行增,刪,改,查的操做.
DOM的地位:DOM處在編程語言和XML文件之間.
使用DOM來解析XML文檔,首先DOM解析器會把XML加載到內存,XML文件在內存中以對象樹的形式存在,這個對象樹模型就是DOM模型.
使用ODM來解析XML文檔時,XML中全部的信息在對象樹中以樹節點(Node)的形式存在.
DOM樹中的節點類型主要有五種:
1.元素節點(Element):XML中的元素在DOM樹中成爲元素節點,節點類型(NodeType)爲1;
2.屬性節點(Attribute):XML中的屬性在DOM樹中成爲屬性節點,節點類型(NodeType)爲2;
3.文本節點(Text):XML中的文本在DOM樹中成爲文本節點,節點類型(NodeType)爲3;
4.註釋節點(Comments):XML中的註釋在DOM樹中成爲註釋節點,節點類型(NodeType)爲8;
5.文檔節點(Docment):是DOM樹的根節點,節點類型(NodeType)爲9;
在.NET的System.Xml命名空間中包含了操做XML的類和接口,其中基於DOM操做XML的核心類如表所示:
類名 | 說明 |
XmlDocument | 表示一個XML文檔 |
XmlNode | 表示XML文檔中的單個節點 |
XmlNodeList | 表示排序的節點集合 |
XmlElement | 表示一個元素 |
XmlAttribute | 表示一個屬性 |
XmlAttributeCollection | 表示元素節點的屬性集合 |
XmlText | 表示元素或屬性的文本內容 |
XmlNode是DOM最關鍵的一個類,它的實例表示一個DOM樹中的一個節點.XmlNode類沒有公共構造函數,這表示不能用new關鍵字建立XmlNode的實例.
1)屬性
屬性 | 說明 |
Attributes | 若是節點的類型是XmlNodeType.Element,該屬性就返回包含元素特性的XmlAttributeCollection(派生於XmlNamedNodeMap),不然返回null. |
ChildNodes | 獲取節點中全部子節點的XmlNodeList.若是該節點沒有子節點,該屬性就返回一個空列表. |
FirstChild | 獲取一個XmlNode,表示當前節點的第一個子節點.若是該節點沒有子節點,就返回一個null. |
HasChildNode | 獲取一個布爾值,表示該節點是否有子節點.若是有子節點,該布爾值就是true,不然就是false. |
InnerText | 表示一個字符串,其值把當前節點及其全部子節點的文本內容鏈接起來. |
InnerXml | 獲取或設置當前節點的子內容標記. |
LastChild | 獲取一個XmlNode實例,表示當前節點的最後一個子節點,若是沒有這樣的節點,就返回一個空引用. |
Name | 當在派生類中被重寫時,對不一樣的節點類型以字符串形式返回節點的限定名稱. |
NextSibling | 該屬性返回XmlNode實例,它表示按照文檔順序與當前節點同級(即有相同的深度)的下一節點.若是不存在這樣的節點,就返回一個空引用. |
NodeType | 當在派生類中被重寫時,獲取當前節點的類型,返回一個XmlNodeType值. |
OuterXml | 這個字符串屬性遞歸獲取當前節點及其全部子節點的XML標記. |
OwnerDocument | 獲取節點所屬的XmlDocument實例.若是節點自己是一個文檔,該屬性就是null. |
ParentNode | 獲取XmlNode的父節點,若是沒有就返回null. |
PreviousSibling | 獲取與當前節點深度相同的前一個XmlNode,若是沒有就返回null. |
Value | 獲取或設置節點的值. |
2)方法
方法 | 用法 |
AppendChild | 帶一個XmlNode類型的參數(或其派生類型),該方法把參數添加到當前節點的子節點列表的末尾.返回值是所添加的節點. |
Clone | 對節點執行深複製(即包含全部的派生節點和屬性).該方法沒有參數,返回XmlNode副本,等價於CloneNode(true). |
CloneNode | 這是一個抽象方法,它複製當前節點. |
InsertAfter | 在給定引用節點的子節點列表中,在該引用節點的後面插入一個節點.該方法帶兩個XmlNode類型的參數:一個是要添加的子節點,另外一個是引用節點. |
InsertBefore | 與InsertAfter類型,但新節點在引用節點的前面插入(除非引用節點爲null,此時節點添加到子節點列表的最後). |
PrependChild | 把一個節點添加到該節點的子節點列表的開頭. |
RemoveAll | 刪除調用節點的全部子節點和/或特性. |
RemoveChild | 刪除指定的子節點,該方法帶一個XmlNode類型的參數,刪除成功就返回該節點. |
ReplaceChild | 用一個新節點代替一個子節點,返回舊(被替換的)節點. |
XmlDocument類派生自XmlNode類.其實例表示一個Xml文檔對象.XmlDocument類有許多用途.它不只能夠執行DOM模型中全部外圍結構的接口,還能夠建立新節點.
1)屬性
屬性 | 說明 |
DocumentElement(只讀) | 返回組成DOM樹中根的XmlElement. |
DocumentType(只讀) | 把DOCTYPE聲明(若是有)返回一個XmlDocumentType對象 |
PreserveWhitespace | 這個布爾屬性控制着在執行Load,LoadXml和Save過程當中是否保留空白. 若是在執行這些操做中的任何一個以前,該布爾屬性是true,就保留空白. |
2)方法
方法 | 說明 |
CreateAttribute | 用給定的名稱建立一個XmlAttribute節點. |
CreateElement | 建立一個XmlElement節點. |
CreateNode | 根據給出的類型,名稱和命名空間信息,建立並返回一個XmlNode. |
CreateTextNode | 根據一個包含新節點中文本內容的字符串,建立並返回一個XmlText節點. |
CreateXmlDeclaration | 根據下面的參數建立一個XmlDeclaration節點. |
GetElementById | 返回一個匹配給定字符串ID參數的XmlElement. |
GetElementByTagName | 返回一個XmlNodeList,其中包含其名稱匹配給定名稱的全部子元素. |
Load | 加載一個XML文檔,並解析它. |
LoadXml | 從字符串中加載XML文檔.這個字符串參數由文檔標記組成. |
Save | 把XML文檔寫到給定的位置上. |
XMLNodeList是一個節點集合類,其元素爲XmlNode類型.XmlNodeList沒有公共構造函數,所以不能建立和刪除XmlNodeList類的實例.得到XmlNodeList實例最經常使用的方式是引用XmlNode的ChildNodes屬性.
1)屬性
屬性 | 說明 |
Count | 獲取XmlNodeList中的節點數 |
ItemOf(只讀) | 檢索給定索引處的節點 |
方法 | 用法 |
GetEnumerator | 該方法沒有參數,返回一個IEnumerator實例.以支持在列表上執行foreach迭代. |
Item | 該方法帶一個基於0的整數索引參數,返回列表中該索引所在位置的XmlNode.若是索引超出列表的範圍,該方法就返回null. |
屬性 | 說明 |
Attributes | 獲取一個XmlAttributeCollection,其中包含該元素節點的全部屬性. |
ClildNodes | 獲取元素節點的全部子節點.(繼承自XmlNode). |
HasAttributes | 獲取一個boolean值,該值指示當前元素節點是否有任何屬性. |
HasChildNodes | 獲取一個值,該值指示節點是否有任何子節點.(繼承自XmlNode). |
InnerText | 獲取或設置節點及其全部子級的串連值.(重寫XmlNode.InnerText). |
InnerXml | 獲取或設置只表示此節點子級的標記.(重寫XmlNode.InnerXml). |
IsEmpty | 獲取或設置一個布爾值.當該值爲true時,元素就是空的,並以<name />縮寫形式表示.若是元素是子內容或以完整形式<name><name/>表示, 則該屬性返回false.若是這個屬性設置爲true,就刪除它的全部子內容,由於這將指定該元素應爲空. |
LastChild | 獲取元素節點的最後一個子級.(繼承自XmlNode). |
Name | 獲取元素節點的限定名.(重寫XmlNode.Name). |
NextSibling | 獲取這個元素節點後面的XmlNode,若是不存在這樣的節點,該屬性就返回null. |
NodeType | 獲取當前元素節點的類型.(重寫XmlNode.NodeTye).返回XmlNodeType.Element. |
OwnerDocument | 獲取該元素節點所屬的XmlDocument(重寫XmlNode.OwnerDocument). |
PreviousSibling | 獲取緊接在該元素節點以前的節點.(繼承自XmlLinkedNode). |
Value | 獲取或設置元素節點的值.(繼承自XmlNode). |
方法 | 說明 |
AppendChild | 將指定的節點添加到該節點的子節點列表的末尾.(繼承自XmlNode). |
CloneNode | 複製屬性,並把副本返回爲一個XmlNode實例.該方法帶一個布爾參數(該參數爲true時,會遞歸複製子內容,進行深複製, 該參數爲false時,則僅複製元素). |
GetAttribute | 返回指定屬性的屬性值. |
GetAttributeNode | 與GetAttribute相似(包括重載的參數列表),但若是找到匹配,返回類型是XmlAttribute,若是沒有找到匹配,則返回null. |
GetElementsByTagName | 返回一個XmlNodeList,它包含與指定名稱匹配的全部子代元素的列表. |
HasAttribute | 肯定當前節點是否具備指定的屬性. |
RemoveAll | 移除當前節點的全部指定屬性和子級.不移除默認屬性.(重寫XmlNode.RemoveAll()). |
RemoveAttribute | 移除指定的屬性. |
RemoveAttributeAt | 從元素中移除具備指定索引的屬性節點. |
RemoveAttributeNode | 從元素中刪除並返回XmlAttribute. |
RemoveChild | 移除指定的子節點.(繼承自XmlNode). |
ReplaceChild | 用newChild節點替換子節點oldChild.(繼承自XmlNode). |
SetAttribute | 設置指定屬性的值. |
SetAttributeNode | 添加一個新XmlAttribute. |
XmlAttribute是System.Xml命名空間中最經常使用的DOM類之一.它也直接派生自XmlNode,是惟一適合於表示XML屬性的類.
1)屬性
屬性 | 含義 |
Name | 把屬性節點的限定名稱返回爲一個字符串. |
NodeType | 獲取一個XmlNodeType枚舉,其值爲XmlNodeType.Attribute. |
NextSibling | 獲取緊接在該節點以後的節點.(繼承自XmlNode). |
OwnerDocument | 獲取這個特性所屬的XmlDocument. |
OwnerElement | 獲取該屬性所屬的XmlElement. |
PreviousSibling | 獲取緊接在該屬性節點以前的節點.(繼承自XmlNode). |
Value | 獲取或設置節點的值.(重寫XmlNode.Value). |
2)方法
XmlAttribute類的Clone()方法能夠建立此屬性節點的一個副本.
XmlAttributeCollection表示能夠按名稱或索引訪問的屬性的集合,其元素爲XmlAttribute類型.該類派生自XmlNameNodeMap類.
1)屬性
這個類的最經常使用的屬性是Count.這是一個只讀整數屬性,用於獲取集合所包含的XmlAttribute節點數.
2)方法
方法 | 說明 |
Append | 將指定的屬性插入集合,並將其做爲集合中的最後一個節點. |
GetEnumerator | 提供一個IEnumerator實例,以支持在映射內容上執行foreach的枚舉. |
InsertAfter | 將指定屬性直接插入到指定引用屬性以後. |
InsertBefore | 將指定屬性直接插入到指定引用屬性以前. |
Item | 檢索位於XmlNamedNodeMap中指定索引處的節點.(繼承自XmlNamedNodeMap). |
Prepend | 將指定屬性插入集合中,並將其做爲集合的第一個節點. |
Remove | 從集合中移除指定的屬性. |
RemoveAll | 從集合中移除全部屬性. |
RemoveAt | 從集合中移除與指定的索引對應的屬性. |
RemoveNamedItem | 從映射中刪除指定的節點,該方法有兩個重載形式,它們分別匹配GetNamedItem的兩個不一樣版本. |
SetNamedItem | 在集合中插入所提供的XmlNode實例.若是傳送過來的節點已經在映射中(就是修改節點的內容), 就返回舊(被替代的)節點.若是節點是新的,就返回null. |
XmlText表示元素節點或屬性節點的文本內容.該類沒有構造方法,但可使用XmlNode的CreateTextNode()方法獲得實例.
1)屬性
XmlText的Length屬性能夠獲取數據的長度(以字符爲單位).(從XmlCharacterData繼承).XmlText的Value屬性用於獲得文本節點的位置.