XML作用
對於XML,想必各位都比較了解,我也就不用費筆墨來描述它是什麼了,我想在未來的Web開發中XML一定會大放異彩,XML是可擴展標記語言,使用它企業可以制定一套自己的數據格式。用於Internet的數據傳輸,我想,這是XML對於我們這些程序員最誘人的地方!
我們今天的主題不是論述XML的好處,而是討論在C#中如何使用XML。下面我們來了解一下使用程序訪問XML的一些基礎理論知識。
訪問的兩種模型:
在程序中訪問進而操作XML文件一般有兩種模型,分別是使用DOM(文檔對象模型)和流模型,使用DOM的好處在於它允許編輯和更新XML文檔,可以隨機訪問文檔中的數據,可以使用XPath查詢,但是,DOM的缺點在於它需要一次性的加載整個文檔到內存中,對於大型的文檔,這會造成資源問題。流模型很好的解決了這個問題,因為它對XML文件的訪問采用的是流的概念,也就是說,任何時候在內存中只有當前節點,但它也有它的不足,它是只讀的,僅向前的,不能在文檔中執行向後導航操作。雖然是各有千秋,但我們也可以在程序中兩者並用實現優劣互補嘛,呵呵
一、DOM文檔對象模型操作
代碼如下:
using System.Xml;
XmlDocument xml=new XmlDocument();//初始化一個xml實例
xml.Load(path);//導入指定xml文件
xml.Load(HttpContext.Current.Server.MapPath("~/file/bookstore.xml"));XmlNode root=xml.SelectSingleNode("/root");//指定一個節點
XmlNodeList childlist=root.ChildNodes;//獲取節點下所有直接子節點
XmlNodeList nodelist=xml.SelectNodes("/Root/News");//獲取同名同級節點集合string id=node.Attributes["id"].Value;//獲取指定節點的指定屬性值
string content=node.InnerText;//獲取指定節點中的文本
root.HasChildNodes;//判斷該節點下是否有子節點
1.XmlDocument類的屬性
XmlDocument類的屬性及說明如下表所示。
屬性
說明
Attributes
當前節點的屬性集合
BaseURI
當前節點的基URI
ChildNodes
節點的所有子節點
DocumentElement
文檔的根
DocumentType
DOCTYPE 聲明的節點
FirstChild
節點的第一個子節點
HasChildNodes
是否有任何子節點
Implementation
獲取當前文檔的 XmlImplementation對象
InnerText
節點包含的所有文本內容
InnerXml
節點所包含的所有XML內容
IsReadOnly
當前節點是否是只讀的
Item
獲取指定的子元素
LastChild
最後一個子節點
LocalName
獲取節點的本地名稱
Name
獲取節點的限定名
NamespaceURI
獲取該節點的命名空間 URI
NameTable
獲取與此實現關聯的 XmlNameTable
NextSibling
獲取緊接在該節點之後的節點
NodeType
獲取當前節點的類型
OuterXml
獲取表示此節點及其所有子節點的標記
OwnerDocument
獲取當前節點所屬的 XmlDocument
ParentNode
獲取該節點(對於可以具有父級的節點)的父級
Prefix
獲取或設置該節點的命名空間前綴
PreserveWhitespace
獲取或設置一個值,該值指示是否在元素內容中保留空白
PreviousSibling
獲取緊接在該節點之前的節點
SchemaInfo
返回節點的後架構驗證信息集 (PSVI)
Schemas
獲取或設置與此 XmlDocument 關聯的 XmlSchemaSet 對象
Value
獲取或設置節點的值
XmlResolver
設置 XmlResolver 以用於解析外部資源
XmlDocument類的方法及說明如下表所示。
方法
說明
AppendChild
將指定的節點添加到該節點的子節點列表的末尾
CreateAttribute
創建具有指定名稱的 XmlAttribute
CreateCDataSection
創建包含指定數據的 XmlCDataSection
CreateComment
創建包含指定數據的 XmlComment
CreateDocumentFragment
創建 XmlDocumentFragment
CreateDocumentType
返回新的 XmlDocumentType 對象
CreateElement
創建 XmlElement
CreateEntityReference
創建具有指定名稱的 XmlEntityReference
CreateNavigator
創建一個用於導航此文檔的新 XPathNavigator 對象
CreateNode
創建 XmlNode
CreateProcessingInstruction
創建一個具有指定名稱和數據的 XmlProcessingInstruction
CreateSignificantWhitespace
創建一個 XmlSignificantWhitespace 節點
CreateTextNode
創建具有指定文本的 XmlText
CreateWhitespace
創建一個 XmlWhitespace 節點
CreateXmlDeclaration
創建一個具有指定值的 XmlDeclaration 節點
GetElementById
獲取具有指定 ID 的 XmlElement
GetElementsByTagName
返回一個 XmlNodeList ,它包含與指定名稱匹配的所有元素的列表
GetNamespaceOfPrefix
查找當前節點范圍內離給定的前綴最近的 xmlns 聲明,並返回聲明中的命名空間 URI
GetPrefixOfNamespace
查找當前節點范圍內離給定的命名空間 URI 最近的 xmlns 聲明,並返回聲明中定義的前綴
GetType
獲取當前實例的 Type
ImportNode
將節點從另一個文檔導入到當前文檔
InsertAfter
將指定的節點緊接著插入指定的引用節點之後
InsertBefore
將指定的節點緊接著插入指定的引用節點之前
Load
加載指定的 XML 數據
LoadXml
從指定的字符串加載 XML 文檔
Normalize
將XmlText 節點都轉換成“正常”形式
PrependChild
將指定的節點添加到該節點的子節點列表的開頭
ReadNode
根據 XmlReader 中的信息創建一個 XmlNode 對象。讀取器必須定位在節點或屬性上
RemoveAll
移除當前節點的所有子節點和/或屬性
RemoveChild
移除指定的子節點
ReplaceChild
用新節點替換舊節點
Save
將 XML 文檔保存到指定的位置
SelectNodes
選擇匹配XPath 表達式的節點列表
SelectSingleNode
選擇匹配 XPath 表達式的第一個 XmlNode
Supports
測試 DOM 實現是否實現特定的功能
Validate
驗證 XmlDocument 是不是 Schemas 屬性中包含的 XML 架構定義語言 (XSD) 架構。
WriteContentTo
將 XmlDocument 節點的所有子級保存到指定的 XmlWriter 中
WriteTo
將 XmlDocument 節點保存到指定的 XmlWriter
下面對常用的方法進行介紹。
(1)Load方法
該方法可以從一個字符串指定的XML文件或是一個流對象、一個TextReader對象、一個XmlReader對象導入XML數據。
(2)LoadXml方法
該方法完成從一個特定的XML文件導入XML數據的功能。默認情況下,LoadXml 方法既不保留空白,也不保留有意義的空白。此方法不執行 DTD 或架構驗證。
(3)Save方法
該方法將XML數據保存到一個XML文件或是一個流對象、一個TextReader對象、一個XmlReader對象導入XML數據。
XmlDocument類的事件及說明如下表所示。
表 XmlDocument類的事件及說明
事件
說明
NodeChanged
當屬於該文檔的節點的 Value已被更改時發生
NodeChanging
當屬於該文檔的節點的 Value 將被更改時發生
NodeInserted
當屬於該文檔的節點已被插入另一個節點時發生
NodeInserting
當屬於該文檔的節點將被插入另一個節點時發生
NodeRemoved
當屬於該文檔的節點已被從其父級移除時發生
NodeRemoving
當屬於該文檔的節點將被從文檔中移除時發生
http://kb.cnblogs.com/page/42226/