C#中基于流的XML文件操作筆記
System.Xml.XmlReader和System.Xml.XmlWriters是兩個(gè)抽象類,XmlReader提供了對(duì)于XML數(shù)據(jù)的快速,非緩存,只進(jìn)模式的讀取器,XmlWriter表示一個(gè)編寫(xiě)器,該編寫(xiě)器提供快速,非緩存,只進(jìn)的方式來(lái)生成包含XML數(shù)據(jù)的流文件。
XmlReader與SAX讀取器類似,不過(guò)前者是提取模式(只進(jìn)只讀的游標(biāo)),后者是推送模式(將事件推送到應(yīng)用程序)。
XmlReader的優(yōu)點(diǎn)是:
1. 簡(jiǎn)化狀態(tài)管理
2.可以有多個(gè)輸入流
3.提取模式可以作為推送模式的基礎(chǔ),反之不行。
4.提供一個(gè)可以將字符串直接寫(xiě)入緩沖區(qū),避免多余字節(jié)的的復(fù)制。
5.有選擇的處理XML流,可以預(yù)先設(shè)置處理XML流的方式。
下面的代碼代碼邏輯簡(jiǎn)單不會(huì)出現(xiàn)異常所以沒(méi)有加入異常處理,只是作為測(cè)試使用。
// ReadXml.cs // XmlReader示例 using System; using System.Xml; class Test { public static void Main(string[] args) { string path = @"G:\資料\C#面向?qū)ο缶幊蘚C#面向?qū)ο缶幊蘚CSharp\Chapter17\books.xml"; XmlReader reader = null; try { // 創(chuàng)建XmlReaderSettings對(duì)象 XmlReaderSettings settings = new XmlReaderSettings(); // 設(shè)置XmlReaderSettings對(duì)象的屬性 settings.ProhibitDtd = false; // 使用XmlReaderSettings對(duì)象來(lái)創(chuàng)建XmlReader對(duì)象 reader = XmlReader.Create(path, settings); ReadXml(reader); reader.Close(); Console.ReadKey(); } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { if (reader != null) reader.Close(); } } private static void ReadXml(XmlReader reader) { try { // 解析文件,并顯示每一個(gè)節(jié)點(diǎn) while (reader.Read()) { switch (reader.NodeType) { case XmlNodeType.Element: if (reader.IsEmptyElement) // 空元素? { Console.WriteLine("<{0}/>", reader.Name); } else { Console.Write("<{0}", reader.Name); if (reader.HasAttributes) // 屬性? { while (reader.MoveToNextAttribute()) { Console.Write(" {0}=\"{1}\"", reader.Name, reader.Value); } } Console.WriteLine(">", reader.Name); } break; case XmlNodeType.Text: Console.WriteLine(reader.Value); break; case XmlNodeType.CDATA: Console.WriteLine("<![CDATA[{0}]]>", reader.Value); break; case XmlNodeType.ProcessingInstruction: Console.WriteLine("<?{0} {1}?>", reader.Name, reader.Value); break; case XmlNodeType.Comment: Console.WriteLine("<!--{0}-->", reader.Value); break; case XmlNodeType.XmlDeclaration: Console.WriteLine("<?xml version='1.0'?>"); break; case XmlNodeType.Document: break; case XmlNodeType.DocumentType: Console.WriteLine("<!DOCTYPE {0} [{1}]>", reader.Name, reader.Value); break; case XmlNodeType.EntityReference: Console.WriteLine(reader.Name); break; case XmlNodeType.EndElement: Console.WriteLine("</{0}>", reader.Name); break; } } } catch (XmlException ex) { Console.WriteLine(ex.Message); } } }
XmlWriters該編寫(xiě)器提供快速,非緩存,只進(jìn)的方式來(lái)生成包含XML數(shù)據(jù)的流文件,優(yōu)點(diǎn)基本和前者一樣。
注意:使用 XmlReader,在調(diào)用 Close 方法前,不會(huì)讀取元素和特性。
XMLWriter using System.Xml; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { string path=@"C:\Users\dell\Desktop\test.xml"; XmlWriter writer=null; XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; settings.IndentChars=(""); writer = XmlWriter.Create(path, settings); WriteXml(writer); writer.Close(); } private static void WriteXml(XmlWriter writer) { writer.WriteStartElement("books"); WriteChildNode(writer, "紅樓夢(mèng)", "曹雪芹", "25"); WriteChildNode(writer, "三國(guó)演義", "羅貫中", "20"); WriteChildNode(writer, "水滸傳", "施耐庵", "18"); WriteChildNode(writer, "聊齋志異", "蒲松齡", "16"); writer.WriteEndElement(); } private static void WriteChildNode(XmlWriter writer, string title, string author, string price) { writer.WriteStartElement("book"); writer.WriteStartElement("title"); writer.WriteValue(title); writer.WriteEndElement(); writer.WriteStartElement("author"); writer.WriteValue(author); writer.WriteEndElement(); writer.WriteStartElement("price"); writer.WriteValue(price); writer.WriteEndElement(); writer.WriteEndElement(); } } }
基本用法很簡(jiǎn)單,就是輸出前后開(kāi)關(guān)標(biāo)簽 ,主要使用這三個(gè)方法WriteStartElement() writer.WriteValue() WriteEndElement()
注意: XmlWriter 方法輸出 XML 時(shí),在調(diào)用 Close 方法前,不會(huì)寫(xiě)入元素和特性。
- C# FileStream讀寫(xiě)的文本操作代碼分析
- C#基礎(chǔ)知識(shí)之FileStream
- C# FileStream文件讀寫(xiě)詳解
- C#流類FileStream學(xué)習(xí)使用筆記
- c#通過(guò)DES加密算法加密大文件的方法
- asp.net(C#)中上傳大文件的幾中常見(jiàn)應(yīng)用方法
- C#從文件流讀取xml文件到DataSet并顯示的方法
- C#使用文件流讀取文件的方法
- C#通過(guò)流寫(xiě)入數(shù)據(jù)到文件的方法
- C#文件和字節(jié)流的轉(zhuǎn)換方法
- C#使用FileStream循環(huán)讀取大文件數(shù)據(jù)的方法示例
相關(guān)文章
WindowsForm實(shí)現(xiàn)TextBox占位符Placeholder提示功能
這篇文章主要介紹了WindowsForm實(shí)現(xiàn)TextBox占位符Placeholder提示,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07解析C# Console 控制臺(tái)為什么也會(huì)卡死(原因分析)
在分析旅程中,總會(huì)有幾例控制臺(tái)的意外卡死導(dǎo)致的生產(chǎn)事故,有經(jīng)驗(yàn)的朋友都知道,控制臺(tái)卡死一般是動(dòng)了快速編輯窗口的緣故,雖然知道緣由,但一直沒(méi)有時(shí)間探究底層原理,市面上也沒(méi)有對(duì)這塊的底層原理介紹,昨天花了點(diǎn)時(shí)間簡(jiǎn)單探究了下,感興趣的朋友一起看看吧2023-10-10一看就懂:圖解C#中的值類型、引用類型、棧、堆、ref、out
這篇文章主要介紹了一看就懂:圖解C#中的值類型、引用類型、棧、堆、ref、out,本文用淺顯易懂的語(yǔ)言組織介紹了這些容易混淆的概念,需要的朋友可以參考下2015-06-06C#使用Directoryinfo類獲得目錄信息和屬性的方法
這篇文章主要介紹了C#使用Directoryinfo類獲得目錄信息和屬性的方法,涉及C#操作目錄的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04c# HttpWebRequest通過(guò)代理服務(wù)器抓取網(wǎng)頁(yè)內(nèi)容應(yīng)用介紹
在C#項(xiàng)目開(kāi)發(fā)過(guò)程中可能會(huì)有些特殊的需求比如:用HttpWebRequest通過(guò)代理服務(wù)器驗(yàn)證后抓取網(wǎng)頁(yè)內(nèi)容,要想實(shí)現(xiàn)此方法并不容易,本文整理了一下,有需求的朋友可以參考下2012-11-11