最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#中基于流的XML文件操作筆記

 更新時(shí)間:2015年06月18日 09:59:01   投稿:junjie  
這篇文章主要介紹了C#中基于流的XML文件操作筆記,本文主要是講解針對(duì)XmlReader和XmlWriters兩個(gè)XML讀寫類的使用,需要的朋友可以參考下

System.Xml.XmlReader和System.Xml.XmlWriters是兩個(gè)抽象類,XmlReader提供了對(duì)于XML數(shù)據(jù)的快速,非緩存,只進(jìn)模式的讀取器,XmlWriter表示一個(gè)編寫器,該編寫器提供快速,非緩存,只進(jìn)的方式來生成包含XML數(shù)據(jù)的流文件。

XmlReader與SAX讀取器類似,不過前者是提取模式(只進(jìn)只讀的游標(biāo)),后者是推送模式(將事件推送到應(yīng)用程序)。

XmlReader的優(yōu)點(diǎn)是:
1. 簡(jiǎn)化狀態(tài)管理
2.可以有多個(gè)輸入流
3.提取模式可以作為推送模式的基礎(chǔ),反之不行。
4.提供一個(gè)可以將字符串直接寫入緩沖區(qū),避免多余字節(jié)的的復(fù)制。
5.有選擇的處理XML流,可以預(yù)先設(shè)置處理XML流的方式。
 下面的代碼代碼邏輯簡(jiǎn)單不會(huì)出現(xiàn)異常所以沒有加入異常處理,只是作為測(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ì)象來創(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該編寫器提供快速,非緩存,只進(jìn)的方式來生成包含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)單,就是輸出前后開關(guān)標(biāo)簽 ,主要使用這三個(gè)方法WriteStartElement() writer.WriteValue() WriteEndElement()
     注意:  XmlWriter 方法輸出 XML 時(shí),在調(diào)用 Close 方法前,不會(huì)寫入元素和特性。

相關(guān)文章

  • C# 設(shè)計(jì)模式系列教程-命令模式

    C# 設(shè)計(jì)模式系列教程-命令模式

    在軟件系統(tǒng)中,行為請(qǐng)求者與行為實(shí)現(xiàn)者通常是一種緊耦合的關(guān)系,但某些場(chǎng)合,比如需要對(duì)行為進(jìn)行記錄、撤銷或重做、事務(wù)等處理時(shí),這種無法抵御變化的緊耦合的設(shè)計(jì)就不太合適。
    2016-06-06
  • C#多線程之Thread中Thread.IsAlive屬性用法分析

    C#多線程之Thread中Thread.IsAlive屬性用法分析

    這篇文章主要介紹了C#多線程之Thread中Thread.IsAlive屬性用法,實(shí)例分析了C#判斷線程可用狀態(tài)的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • 給 c# 程序員的十個(gè)重要提示

    給 c# 程序員的十個(gè)重要提示

    這篇文章主要介紹了給 c# 程序員的十個(gè)重要提示,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-02-02
  • Unity中C#和Java的相互調(diào)用實(shí)例代碼

    Unity中C#和Java的相互調(diào)用實(shí)例代碼

    在unity中接入sdk或者定制一些功能時(shí),需要調(diào)用系統(tǒng)接口。安卓手機(jī)實(shí)際操作中,也就是Unity與android相互調(diào)用。我們?cè)赨nity中使用c#,android中使用java。
    2018-02-02
  • 簡(jiǎn)單的excel導(dǎo)入導(dǎo)出示例分享

    簡(jiǎn)單的excel導(dǎo)入導(dǎo)出示例分享

    這篇文章主要介紹了簡(jiǎn)單的excel導(dǎo)入導(dǎo)出示例分享,需要的朋友可以參考下
    2014-03-03
  • c# 預(yù)處理識(shí)別硬幣的數(shù)據(jù)集

    c# 預(yù)處理識(shí)別硬幣的數(shù)據(jù)集

    這篇文章主要介紹了c# 預(yù)處理識(shí)別硬幣的數(shù)據(jù)集的方法,幫助大家更好的利用c#進(jìn)行深度學(xué)習(xí),感興趣的朋友可以了解下
    2020-12-12
  • C# 文件下載之?dāng)帱c(diǎn)續(xù)傳實(shí)現(xiàn)代碼

    C# 文件下載之?dāng)帱c(diǎn)續(xù)傳實(shí)現(xiàn)代碼

    本篇文章主要介紹了C# 文件下載之?dāng)帱c(diǎn)續(xù)傳實(shí)現(xiàn)代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01
  • C#中使用CAS實(shí)現(xiàn)無鎖算法的示例詳解

    C#中使用CAS實(shí)現(xiàn)無鎖算法的示例詳解

    CAS(Compare-and-Swap)是一種多線程并發(fā)編程中常用的原子操作,用于實(shí)現(xiàn)多線程間的同步和互斥訪問。本文將利用CAS實(shí)現(xiàn)無鎖算法,需要的可以參考一下
    2023-04-04
  • C#中Action和Func的區(qū)別

    C#中Action和Func的區(qū)別

    這篇文章主要介紹了C#中Action和Func的區(qū)別,是進(jìn)行C#程序設(shè)計(jì)時(shí)需要加以注意的知識(shí)點(diǎn),需要的朋友可以參考下
    2014-09-09
  • 基于FineUI Grid控件添加右鍵菜單

    基于FineUI Grid控件添加右鍵菜單

    大家對(duì)于FineUI Grid控件會(huì)添加右鍵菜單嗎,下面小編就給大家詳細(xì)介紹基于FineUI Grid控件添加右鍵菜單,需要的朋友可以參考下
    2015-08-08

最新評(píng)論

克东县| 永德县| 额济纳旗| 昌宁县| 嵊泗县| 囊谦县| 军事| 珠海市| 普安县| 中方县| 华阴市| 江北区| 香格里拉县| 建瓯市| 开阳县| 温宿县| 滨海县| 贵州省| 都昌县| 易门县| 凭祥市| 甘德县| 新绛县| 武宁县| 新丰县| 浙江省| 耿马| 如皋市| 黔西| 乌拉特后旗| 敖汉旗| 墨江| 清镇市| 湛江市| 民县| 绿春县| 青神县| 和林格尔县| 长子县| 夏邑县| 长海县|