欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

XmlReader與SAX讀取器類似,不過前者是提取模式(只進只讀的游標),后者是推送模式(將事件推送到應(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)標簽 ,主要使用這三個方法WriteStartElement() writer.WriteValue() WriteEndElement()
     注意:  XmlWriter 方法輸出 XML 時,在調(diào)用 Close 方法前,不會寫入元素和特性。

相關(guān)文章

  • C#刪除最后一個結(jié)尾逗號的方法

    C#刪除最后一個結(jié)尾逗號的方法

    這篇文章主要介紹了C#刪除最后一個結(jié)尾逗號的方法,涉及C#、操作字符串的技巧,簡單實用,非常具有實用價值,需要的朋友可以參考下
    2015-03-03
  • WindowsForm實現(xiàn)TextBox占位符Placeholder提示功能

    WindowsForm實現(xiàn)TextBox占位符Placeholder提示功能

    這篇文章主要介紹了WindowsForm實現(xiàn)TextBox占位符Placeholder提示,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • 解析C# Console 控制臺為什么也會卡死(原因分析)

    解析C# Console 控制臺為什么也會卡死(原因分析)

    在分析旅程中,總會有幾例控制臺的意外卡死導(dǎo)致的生產(chǎn)事故,有經(jīng)驗的朋友都知道,控制臺卡死一般是動了快速編輯窗口的緣故,雖然知道緣由,但一直沒有時間探究底層原理,市面上也沒有對這塊的底層原理介紹,昨天花了點時間簡單探究了下,感興趣的朋友一起看看吧
    2023-10-10
  • C# FTP操作類分享

    C# FTP操作類分享

    這篇文章主要為大家分享了C# FTP操作類的相關(guān)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 一看就懂:圖解C#中的值類型、引用類型、棧、堆、ref、out

    一看就懂:圖解C#中的值類型、引用類型、棧、堆、ref、out

    這篇文章主要介紹了一看就懂:圖解C#中的值類型、引用類型、棧、堆、ref、out,本文用淺顯易懂的語言組織介紹了這些容易混淆的概念,需要的朋友可以參考下
    2015-06-06
  • C#獲得文件屬性信息的實現(xiàn)方法

    C#獲得文件屬性信息的實現(xiàn)方法

    這篇文章主要介紹了C#獲得文件屬性信息的實現(xiàn)方法,對于C#初學(xué)者了解與學(xué)習(xí)應(yīng)用程序設(shè)計有一定的借鑒價值,需要的朋友可以參考下
    2014-07-07
  • C#使用NPOI庫讀寫Excel文件

    C#使用NPOI庫讀寫Excel文件

    這篇文章主要為大家詳細介紹了C#使用NPOI庫讀寫Excel文件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • C#使用Directoryinfo類獲得目錄信息和屬性的方法

    C#使用Directoryinfo類獲得目錄信息和屬性的方法

    這篇文章主要介紹了C#使用Directoryinfo類獲得目錄信息和屬性的方法,涉及C#操作目錄的技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • c# HttpWebRequest通過代理服務(wù)器抓取網(wǎng)頁內(nèi)容應(yīng)用介紹

    c# HttpWebRequest通過代理服務(wù)器抓取網(wǎng)頁內(nèi)容應(yīng)用介紹

    在C#項目開發(fā)過程中可能會有些特殊的需求比如:用HttpWebRequest通過代理服務(wù)器驗證后抓取網(wǎng)頁內(nèi)容,要想實現(xiàn)此方法并不容易,本文整理了一下,有需求的朋友可以參考下
    2012-11-11
  • 淺析c# 線程同步

    淺析c# 線程同步

    這篇文章主要介紹了c# 線程同步的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c#,感興趣的朋友可以了解下
    2020-08-08

最新評論