C#中基于流的XML文件操作筆記
System.Xml.XmlReader和System.Xml.XmlWriters是兩個抽象類,XmlReader提供了對于XML數(shù)據(jù)的快速,非緩存,只進模式的讀取器,XmlWriter表示一個編寫器,該編寫器提供快速,非緩存,只進的方式來生成包含XML數(shù)據(jù)的流文件。
XmlReader與SAX讀取器類似,不過前者是提取模式(只進只讀的游標(biāo)),后者是推送模式(將事件推送到應(yīng)用程序)。
XmlReader的優(yōu)點是:
1. 簡化狀態(tài)管理
2.可以有多個輸入流
3.提取模式可以作為推送模式的基礎(chǔ),反之不行。
4.提供一個可以將字符串直接寫入緩沖區(qū),避免多余字節(jié)的的復(fù)制。
5.有選擇的處理XML流,可以預(yù)先設(shè)置處理XML流的方式。
下面的代碼代碼邏輯簡單不會出現(xiàn)異常所以沒有加入異常處理,只是作為測試使用。
// 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對象
XmlReaderSettings settings = new XmlReaderSettings();
// 設(shè)置XmlReaderSettings對象的屬性
settings.ProhibitDtd = false;
// 使用XmlReaderSettings對象來創(chuàng)建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
{
// 解析文件,并顯示每一個節(jié)點
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數(shù)據(jù)的流文件,優(yōu)點基本和前者一樣。
注意:使用 XmlReader,在調(diào)用 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();
}
}
}
基本用法很簡單,就是輸出前后開關(guān)標(biāo)簽 ,主要使用這三個方法WriteStartElement() writer.WriteValue() WriteEndElement()
注意: XmlWriter 方法輸出 XML 時,在調(diào)用 Close 方法前,不會寫入元素和特性。
相關(guān)文章
C#多線程之Thread中Thread.IsAlive屬性用法分析
這篇文章主要介紹了C#多線程之Thread中Thread.IsAlive屬性用法,實例分析了C#判斷線程可用狀態(tài)的技巧,非常具有實用價值,需要的朋友可以參考下2015-04-04
C# 文件下載之?dāng)帱c續(xù)傳實現(xiàn)代碼
本篇文章主要介紹了C# 文件下載之?dāng)帱c續(xù)傳實現(xiàn)代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-01-01

