XML简介及两种C#读取方式
XML簡介及兩種C#讀取方式
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;//判斷該節點下是否有子節點 <?xml version="1.0" encoding="utf-8" ?> <taobaoke_items_get_response><taobaoke_items list="true"><taobaoke_item><num_iid>21998240478</num_iid><price>88.00</price><title>多聚2013春裝新品夏新款韓版蕾絲連衣裙 長袖</title></taobaoke_item><taobaoke_item><num_iid>19019979485</num_iid><price>152.00</price><title>沖皇冠 韓版修身雪紡打底春裝 新款白色蕾絲連衣裙夏</title></taobaoke_item><taobaoke_item><num_iid>18984395601</num_iid><price>98.00</price><title>韓版熱賣2013春裝新大碼長袖修身蕾絲連衣裙拼接蕾絲打底裙</title></taobaoke_item><taobaoke_item><num_iid>22646972463</num_iid><price>108.00</price><title>2013春裝新品韓大碼修身打底女裙翻領春季新款長袖連衣裙</title></taobaoke_item><taobaoke_item><num_iid>14559482917</num_iid><price>29.00</price><title>2013春裝新款 春連衣裙 夏季V領修身百搭時尚打底裙子</title></taobaoke_item></taobaoke_items><total_results>99999999999</total_results> </taobaoke_items_get_response>?注:這里的集合可以是
<num_iid>14559482917</num_iid> <price>29.00</price> <title>2013春裝新款 春連衣裙 夏季V領修身百搭時尚打底裙子</title> ------------------------------------------------------ <total_results>777777</total_results> <total_results>888888</total_results> <total_results>999999</total_results> ? string xmlFilePath = @"G:\test\tt\Pu_list.xml";XmlDocument doc = new XmlDocument();doc.Load(xmlFilePath);XmlNodeList NodeList_total = doc.SelectNodes("/taobaoke_items_get_response/total_results");//total_results集合if (NodeList_total.Count != 0){string total_results = NodeList_total.Item(0).InnerText;//total_results集合,第1個total_results節點下的所有文本值 Response.Write(total_results);Response.Write("</br>");}XmlNodeList NodeList_item = doc.SelectNodes("/taobaoke_items_get_response/taobaoke_items/taobaoke_item");if (NodeList_item.Count != 0){foreach (XmlNode Node in NodeList_item){XmlNodeList taobaoke_item = Node.ChildNodes;//taobaoke_item集合,第1個taobaoke_item下的所有節點(num_iid、price、title)組成集合Response.Write("ID:"); Response.Write(taobaoke_item.Item(0).InnerText);//(num_iid、price、title)集合,num_iid下的所有文本值Response.Write("-----------價格:"); Response.Write(taobaoke_item.Item(1).InnerText);//(num_iid、price、title)集合,price下的所有文本值Response.Write("-----------標題:"); Response.Write(taobaoke_item.Item(2).InnerText);//(num_iid、price、title)集合,title下的所有文本值Response.Write("</br>");}Response.Write(NodeList_item.Item(0).InnerText);//taobaoke_item節點集合,第1個taobaoke_item下的所有文本值}?
?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 以用于解析外部資源 |
? 2.XmlDocument類的方法
?? 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 節點都轉換成“正?!毙问?/p> |
| 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數據。
? 3.XmlDocument類的事件
??? XmlDocument類的事件及說明如下表所示。
?????????????????????? 表 ? XmlDocument類的事件及說明
| 事件 | 說明 |
| NodeChanged | 當屬于該文檔的節點的 Value已被更改時發生 |
| NodeChanging | 當屬于該文檔的節點的 Value 將被更改時發生 |
| NodeInserted | 當屬于該文檔的節點已被插入另一個節點時發生 |
| NodeInserting | 當屬于該文檔的節點將被插入另一個節點時發生 |
| NodeRemoved | 當屬于該文檔的節點已被從其父級移除時發生 |
| NodeRemoving | 當屬于該文檔的節點將被從文檔中移除時發生 |
http://kb.cnblogs.com/page/42226/?
總結
以上是生活随笔為你收集整理的XML简介及两种C#读取方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 好玩的Python-摩斯码发报机
- 下一篇: 超级计算机紫金,E级超算,下一张黑洞照片