栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C# > C#教程

C#中基于流的XML文件操作笔记

C#教程 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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#面向对象编程CSharpChapter17books.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("", reader.Value);
     break;
   case XmlNodeType.ProcessingInstruction:
     Console.WriteLine("", reader.Name, reader.Value);
     break;
   case XmlNodeType.Comment:
     Console.WriteLine("", reader.Value);
     break;
   case XmlNodeType.XmlDeclaration:
     Console.WriteLine("");
     break;
   case XmlNodeType.document:
     break;
   case XmlNodeType.documentType:
     Console.WriteLine("", reader.Name, reader.Value);
     break;
   case XmlNodeType.EntityReference:
     Console.WriteLine(reader.Name);
     break;
   case XmlNodeType.EndElement:
     Console.WriteLine("", 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:UsersdellDesktoptest.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 方法前,不会写入元素和特性。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/125070.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号