C#中基於流的XML文件操作筆記。本站提示廣大學習愛好者:(C#中基於流的XML文件操作筆記)文章只能為提供參考,不一定能成為您想要的結果。以下是C#中基於流的XML文件操作筆記正文
System.Xml.XmlReader和System.Xml.XmlWriters是兩個籠統類,XmlReader供給了關於XML數據的疾速,非緩存,只進形式的讀取器,XmlWriter表現一個編寫器,該編寫器供給疾速,非緩存,只進的方法來生成包括XML數據的流文件。
XmlReader與SAX讀取器相似,不外前者是提取形式(只進只讀的游標),後者是推送形式(將事宜推送到運用法式)。
XmlReader的長處是:
1. 簡化狀況治理
2.可以有多個輸出流
3.提取形式可以作為推送形式的基本,反之不可。
4.供給一個可以將字符串直接寫入緩沖區,防止過剩字節的的復制。
5.有選擇的處置XML流,可以事後設置處置XML流的方法。
上面的代碼代碼邏輯簡略不會湧現異常所以沒有參加異常處置,只是作為測試應用。
// ReadXml.cs // XmlReader示例 using System; using System.Xml; class Test { public static void Main(string[] args) { string path = @"G:\材料\C#面向對象編程\C#面向對象編程\CSharp\Chapter17\books.xml"; XmlReader reader = null; try { // 創立XmlReaderSettings對象 XmlReaderSettings settings = new XmlReaderSettings(); // 設置XmlReaderSettings對象的屬性 settings.ProhibitDtd = false; // 應用XmlReaderSettings對象來創立XmlReader對象 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 { // 解析文件,並顯示每個節點 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該編寫器供給疾速,非緩存,只進的方法來生成包括XML數據的流文件,長處根本和前者一樣。
留意:應用 XmlReader,在挪用 Close 辦法前,不會讀取元素和特征。
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, "紅樓夢", "曹雪芹", "25"); WriteChildNode(writer, "三國演義", "羅貫中", "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(); } } }
根本用法很簡略,就是輸入前後開關標簽 ,重要應用這三個辦法WriteStartElement() writer.WriteValue() WriteEndElement()
留意: XmlWriter 辦法輸入 XML 時,在挪用 Close 辦法前,不會寫入元素和特征。