中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#如何使用XML

發布時間:2021-07-16 01:38:39 來源:億速云 閱讀:114 作者:chen 欄目:編程語言

本篇內容主要講解“C#如何使用XML”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C#如何使用XML”吧!

C#如何使用XML

對于XML,想必各位都比較了解,我也就不用費筆墨來描述它是什么了,我想在未來的Web開發中XML一定會大放異彩,XML是可擴展標記語言,使用它企業可以制定一套自己的數據格式,數據按照這種格式在網絡中傳輸然后再通過XSLT將數據轉換成用戶期望的樣子表示出來,這樣便輕易的解決了數據格式不兼容的問題。用于Internet的數據傳輸,我想,這是XML對于我們這些程序員最誘人的地方!

我們今天的主題不是論述XML的好處,而是討論在C#如何使用XML。下面我們來了解一下使用程序訪問XML的一些基礎理論知識。

訪問的兩種模型:

在程序中訪問進而操作XML文件一般有兩種模型,分別是使用DOM(文檔對象模型)和流模型,使用DOM的好處在于它允許編輯和更新XML文檔,可以隨機訪問文檔中的數據,可以使用XPath查詢,但是,DOM的缺點在于它需要一次性的加載整個文檔到內存中,對于大型的文檔,這會造成資源問題。流模型很好的解決了這個問題,因為它對XML文件的訪問采用的是流的概念,也就是說,任何時候在內存中只有當前節點,但它也有它的不足,它是只讀的,僅向前的,不能在文檔中執行向后導航操作。雖然是各有千秋,但我們也可以在程序中兩者并用實現優劣互補嘛,呵呵,這是題外話了!我們今天主要討論XML的讀取,那我們就詳細討論一下流模型吧!

流模型中的變體:

流模型每次迭代XML文檔中的一個節點,適合于處理較大的文檔,所耗內存空間小。流模型中有兩種變體——“推”模型和“拉”模型。

推模型也就是常說的SAX,SAX是一種靠事件驅動的模型,也就是說:它每發現一個節點就用推模型引發一個事件,而我們必須編寫這些事件的處理程序,這樣的做法非常的不靈活,也很麻煩。

.NET中使用的是基于“拉”模型的實現方案,“拉”模型在遍歷文檔時會把感興趣的文檔部分從讀取器中拉出,不需要引發事件,允許我們以編程的方式訪問文檔,這大大的提高了靈活性,在性能上“拉”模型可以選擇性的處理節點,而SAX每發現一個節點都會通知客戶機,從而,使用“拉”模型可以提高 Application的整體效率。

我們今天來講一下該體系結構中的XmlTextReader類,該類提供對Xml文件進行讀取的功能,它可以驗證文檔是否格式良好,如果不是格式良好的Xml文檔,該類在讀取過程中將會拋出XmlException異常,可使用該類提供的一些方法對文檔節點進行讀取,篩選等操作以及得到節點的名稱和值,請牢記:XmlTextReader是基于流模型的實現,打個不恰當的比喻,XML文件就好象水源,閘一開水就流出,流過了就流過了不會也不可以往回流。內存中任何時候只有當前節點,你可以使用XmlTextReader類的Read()方法讀取下一個節點。好了,說了這么多來看一個例子,編程要注重實際對吧。

Example1按紐遍歷文檔讀取數據,Example2,Example3按紐得到節點類型,Example4過濾文檔只獲得數據內容,Example5得到屬性節點,Example6按紐得到命名空間,Example7顯示整個XML文檔,為此,我專門寫一個類來封裝以上功能,該類代碼如下:

  1. namespace XMLReading  

  2. {  

  3. using System;  

  4. using System.Xml;  

  5. using System.Windows.Forms;  

  6. using System.ComponentModel;  

  7.  

  8. /// <summary>  

  9. /// Xml文件讀取器  

  10. /// </summary>  

  11.  

  12. public class XmlReader : IDisposable  

  13. {  

  14. private string _xmlPath;  

  15. private const string _errMsg = "Error Occurred While Reading ";  

  16. private ListBox _listBox;  

  17. private XmlTextReader xmlTxtRd;  

  18.  

  19. #region XmlReader 的構造器  

  20.  

  21. public XmlReader()  

  22. {  

  23. this._xmlPath = string.Empty;  

  24. this._listBox = null;  

  25. this.xmlTxtRd = null;  

  26. }  

  27.  

  28. /// <summary>  

  29. /// 構造器  

  30. /// </summary>  

  31. /// <param name="_xmlPath">xml文件絕對路徑</param>  

  32. /// <param name="_listBox">列表框用于顯示xml</param>  

  33.  

  34. public XmlReader(string _xmlPath, ListBox _listBox)  

  35. {  

  36. this._xmlPath = _xmlPath;  

  37. this._listBox = _listBox;  

  38. this.xmlTxtRd = null;  

  39. }  

  40.  

  41. #endregion  

  42. #region XmlReader 的資源釋放方法  

  43.  

  44. /// <summary>  

  45. /// 清理該對象所有正在使用的資源  

  46.  

  47. /// </summary>  

  48.  

  49. public void Dispose()  

  50. {  

  51. this.Dispose(true);  

  52. GC.SuppressFinalize(this);  

  53. }  

  54.  

  55. /// <summary>  

  56. /// 釋放該對象的實例變量  

  57. /// </summary>  

  58. /// <param name="disposing"></param>  

  59.  

  60. protected virtual void Dispose(bool disposing)  

  61. {  

  62. if (!disposing)  

  63. return;  

  64. if (this.xmlTxtRd != null)  

  65. {  

  66. this.xmlTxtRd.Close();  

  67. this.xmlTxtRd = null;  

  68. }  

  69.  

  70. if (this._xmlPath != null)  

  71. {  

  72. this._xmlPath = null;  

  73. }  

  74. }  

  75.  

  76. #endregion  

  77. #region XmlReader 的屬性  

  78.  

  79. /// <summary>  

  80. /// 獲取或設置列表框用于顯示xml  

  81. /// </summary>  

  82.  

  83. public ListBox listBox  

  84. {  

  85. get  

  86. {  

  87. return this._listBox;  

  88. }  

  89. set  

  90. {  

  91. this._listBox = value;  

  92. }  

  93. }  

  94.  

  95. /// <summary>  

  96. /// 獲取或設置xml文件的絕對路徑  

  97. /// </summary>  

  98.  

  99. public string xmlPath  

  100. {  

  101. get  

  102. {  

  103. return this._xmlPath;  

  104. }  

  105. set  

  106. {  

  107. this._xmlPath = value;  

  108. }  

  109. }  

  110.  

  111. #endregion  

  112.  

  113. /// <summary>  

  114. /// 遍歷Xml文件  

  115. /// </summary>  

  116.  

  117. public void EachXml()  

  118. {  

  119. this._listBox.Items.Clear();  

  120. this.xmlTxtRd = new XmlTextReader(this._xmlPath);  

  121.  

  122. try  

  123. {  

  124. while(xmlTxtRd.Read())  

  125. {  

  126. this._listBox.Items.Add(this.xmlTxtRd.Value);  

  127. }  

  128. }  

  129. catch(XmlException exp)  

  130. {  

  131. throw new XmlException(_errMsg + this._xmlPath + exp.ToString());  

  132. }  

  133. finally  

  134. {  

  135. if (this.xmlTxtRd != null)  

  136. this.xmlTxtRd.Close();  

  137. }  

  138. }  

  139.  

  140. /// <summary>  

  141. /// 讀取Xml文件的節點類型  

  142. /// </summary>  

  143.  

  144. public void ReadXmlByNodeType()  

  145. {  

  146. this._listBox.Items.Clear();  

  147. this.xmlTxtRd = new XmlTextReader(this._xmlPath);  

  148.  

  149. try  

  150. {  

  151. while(xmlTxtRd.Read())  

  152. {  

  153. this._listBox.Items.Add(this.xmlTxtRd.NodeType.ToString());  

  154. }  

  155. }  

  156. catch(XmlException exp)  

  157. {  

  158. throw new XmlException(_errMsg + this._xmlPath + exp.ToString());  

  159. }  

  160. finally  

  161. {  

  162. if (this.xmlTxtRd != null)  

  163. this.xmlTxtRd.Close();  

  164. }  

  165. }  

  166.  

  167. /// <summary>  

  168. /// 根據節點類型過濾Xml文檔  

  169. /// </summary>  

  170. /// <param name="xmlNType">XmlNodeType 節點類型的數組</param>  

  171.  

  172. public void FilterByNodeType(XmlNodeType[] xmlNType)  

  173. {  

  174. this._listBox.Items.Clear();  

  175. this.xmlTxtRd = new XmlTextReader(this._xmlPath);  

  176. try  

  177. {  

  178. while(xmlTxtRd.Read())  

  179. {  

  180. for (int i = 0; i < xmlNType.Length; i++)  

  181. {  

  182. if (xmlTxtRd.NodeType == xmlNType[i])  

  183. {  

  184. this._listBox.Items.Add(xmlTxtRd.Name + " 
    is Type " + xmlTxtRd.NodeType.ToString());  

  185. }  

  186. }  

  187. }  

  188. }  

  189. catch(XmlException exp)  

  190. {  

  191. throw new XmlException(_errMsg + this.xmlPath + exp.ToString());  

  192. }  

  193. finally  

  194. {  

  195. if (this.xmlTxtRd != null)  

  196. this.xmlTxtRd.Close();  

  197. }  

  198. }  

  199.  

  200. /// <summary>  

  201. /// 讀取Xml文件的所有文本節點值  

  202.  

  203. /// </summary>  

  204.  

  205. public void ReadXmlTextValue()  

  206. {  

  207. this._listBox.Items.Clear();  

  208. this.xmlTxtRd = new XmlTextReader(this._xmlPath);  

  209.  

  210. try  

  211. {  

  212. while(xmlTxtRd.Read())  

  213. {  

  214. if (xmlTxtRd.NodeType == XmlNodeType.Text)  

  215. {  

  216. this._listBox.Items.Add(xmlTxtRd.Value);  

  217. }  

  218. }  

  219. }  

  220. catch(XmlException xmlExp)  

  221. {  

  222. throw new XmlException(_errMsg + this._xmlPath + xmlExp.ToString());  

  223. }  

  224. finally  

  225. {  

  226. if (this.xmlTxtRd != null)  

  227. this.xmlTxtRd.Close();  

  228. }  

  229. }  

  230.  

  231. /// <summary>  

  232. /// 讀取Xml文件的屬性  

  233. /// </summary>  

  234.  

  235. public void ReadXmlAttributes()  

  236. {  

  237. this._listBox.Items.Clear();  

  238. this.xmlTxtRd = new XmlTextReader(this._xmlPath);  

  239.  

  240. try  

  241. {  

  242. while(xmlTxtRd.Read())  

  243. {  

  244. if (xmlTxtRd.NodeType == XmlNodeType.Element)  

  245. {  

  246. if (xmlTxtRd.HasAttributes)  

  247. {  

  248. this._listBox.Items.Add("The Element " + xmlTxtRd.Name + " 
    has " + xmlTxtRd.AttributeCount + " Attributes");  

  249.  

  250. this._listBox.Items.Add("The Attributes are:");  

  251.  

  252. while(xmlTxtRd.MoveToNextAttribute())  

  253. {  

  254. this._listBox.Items.Add(xmlTxtRd.Name + " = " + xmlTxtRd.Value);  

  255. }  

  256. }  

  257. else  

  258. {  

  259. this._listBox.Items.Add("The Element " + xmlTxtRd.Name + " has no Attribute");  

  260. }  

  261. this._listBox.Items.Add("");  

  262. }  

  263. }  

  264. }  

  265. catch(XmlException xmlExp)  

  266. {  

  267. throw new XmlException(_errMsg + this._xmlPath + xmlExp.ToString());  

  268. }  

  269. finally  

  270. {  

  271. if (this.xmlTxtRd != null)  

  272. this.xmlTxtRd.Close();  

  273. }  

  274. }  

  275.  

  276. /// <summary>  

  277. /// 讀取Xml文件的命名空間  

  278. /// </summary>  

  279.  

  280. public void ReadXmlNamespace()  

  281. {  

  282. this._listBox.Items.Clear();  

  283. this.xmlTxtRd = new XmlTextReader(this._xmlPath);  

  284. try  

  285. {  

  286. while(xmlTxtRd.Read())  

  287. {  

  288. if (xmlTxtRd.NodeType == XmlNodeType.Element && xmlTxtRd.Prefix != "")  

  289. {  

  290. this._listBox.Items.Add("The Prefix " + xmlTxtRd.Prefix + " 
    is associated with namespace " + xmlTxtRd.NamespaceURI);  

  291.  

  292. this._listBox.Items.Add("The Element with the local name " + xmlTxtRd.
    LocalName + " is associated with" + " the namespace " + xmlTxtRd.NamespaceURI);  

  293. }  

  294.  

  295. if (xmlTxtRd.NodeType == XmlNodeType.Element && xmlTxtRd.HasAttributes)  

  296. {  

  297. while(xmlTxtRd.MoveToNextAttribute())  

  298. {  

  299. if (xmlTxtRd.Prefix != "")  

  300. {  

  301. this._listBox.Items.Add("The Prefix " + xmlTxtRd.Prefix + 
    " is associated with namespace " + xmlTxtRd.NamespaceURI);  

  302.  

  303. this._listBox.Items.Add("The Attribute with the local name " + xmlTxtRd.
    LocalName + " is associated with the namespace " + xmlTxtRd.NamespaceURI);  

  304.  

  305. }  

  306. }  

  307. }  

  308. }  

  309. }  

  310. catch(XmlException xmlExp)  

  311. {  

  312. throw new XmlException(_errMsg + this._xmlPath + xmlExp.ToString());  

  313. }  

  314. finally  

  315. {  

  316. if (this.xmlTxtRd != null)  

  317. this.xmlTxtRd.Close();  

  318. }  

  319. }  

  320.  

  321. /// <summary>  

  322. /// 讀取整個Xml文件  

  323. /// </summary>  

  324.  

  325. public void ReadXml()  

  326. {  

  327. string attAndEle = string.Empty;  

  328. this._listBox.Items.Clear();  

  329. this.xmlTxtRd = new XmlTextReader(this._xmlPath);  

  330.  

  331. try  

  332. {  

  333. while(xmlTxtRd.Read())  

  334. {  

  335. if (xmlTxtRd.NodeType == XmlNodeType.XmlDeclaration)  

  336. this._listBox.Items.Add(string.Format("<?{0} {1} ?>",
    xmlTxtRd.Name,xmlTxtRd.Value));  

  337. else if (xmlTxtRd.NodeType == XmlNodeType.Element)  

  338. {  

  339. attAndEle = string.Format("<{0} ",xmlTxtRd.Name);  

  340. if (xmlTxtRd.HasAttributes)  

  341. {  

  342. while(xmlTxtRd.MoveToNextAttribute())  

  343. {  

  344. attAndEleattAndEle = attAndEle + string.Format("{0}='{1}' 
    ",xmlTxtRd.Name,xmlTxtRd.Value);  

  345. }  

  346. }  

  347.  

  348. attAndEleattAndEle = attAndEle.Trim() + ">";  

  349. this._listBox.Items.Add(attAndEle);  

  350. }  

  351. else if (xmlTxtRd.NodeType == XmlNodeType.EndElement)  

  352. this._listBox.Items.Add(string.Format("</{0}>",xmlTxtRd.Name));  

  353. else if (xmlTxtRd.NodeType == XmlNodeType.Text)  

  354. this._listBox.Items.Add(xmlTxtRd.Value);  

  355. }  

  356. }  

  357. catch(XmlException xmlExp)  

  358. {  

  359. throw new XmlException(_errMsg + this._xmlPath + xmlExp.ToString());  

  360. }  

  361. finally  

  362. {  

  363. if (this.xmlTxtRd != null)  

  364. this.xmlTxtRd.Close();  

  365. }  

  366. }  

  367. }  

到此,相信大家對“C#如何使用XML”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節
推薦閱讀:
  1. c# 操作 xml
  2. C# create xml

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

铁力市| 西宁市| 沅陵县| 柞水县| 长沙县| 青田县| 甘谷县| 钟山县| 胶州市| 策勒县| 中江县| 彰化县| 衡南县| 阿坝县| 四平市| 新野县| 雷州市| 彰化市| 安塞县| 林周县| 临夏县| 台北县| 札达县| 新宁县| 龙江县| 珲春市| 神农架林区| 芒康县| 遂溪县| 河津市| 益阳市| 九台市| 贵州省| 凤台县| 黄骅市| 固原市| 漳浦县| 横山县| 应用必备| 北辰区| 惠水县|