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 方法前,不会写入元素和特性。

C#中基于流的XML文件操作笔记的更多相关文章

  1. 我来讲讲在c#中怎么进行xml文件操作吧,主要是讲解增删改查!

    我把我写的四种方法代码贴上来吧,照着写没啥问题. 注: <bookstore> <book> <Id>1</Id> <tate>2010-1 ...

  2. java中采用dom4j解析xml文件

    一.前言 在最近的开发中用到了dom4j来解析xml文件,以前听说过来解析xml文件的几种标准方式:但是从来的没有应用过来,所以可以在google中搜索dmo4j解析xml文件的方式,学习一下dom4 ...

  3. PHP操作XML文件学习笔记

    原文:PHP操作XML文件学习笔记 XML文件属于标签语言,可以通过自定义标签存储数据,其主要作用也是作为存储数据. 对于XML的操作包括遍历,生成,修改,删除等其他类似的操作.PHP对于XML的操作 ...

  4. C# XML文件操作

    C# XML文件操作 运行环境:Window7 64bit,.NetFramework4.61,C# 6.0: 编者:乌龙哈里 2017-02-09 参考 LINQ to XML System.Xml ...

  5. VC 使用msxml6.dll动态链接库中的函数读写XML文件

    VC 使用msxml6.dll动态链接库中的函数读写XML文件 目录 1 引言 2 .dll使用方法 3 常用函数总结 4 实例应用 5 运行效果预览 6 补充说明 7 不足之处 8 更新   引言: ...

  6. Spring 中基于 AOP 的 XML架构

    Spring 中基于 AOP 的 XML架构 为了使用 aop 命名空间标签,你需要导入 spring-aop j架构,如下所述: <?xml version="1.0" e ...

  7. Spring中加载ApplicationContext.xml文件的方式

    Spring中加载ApplicationContext.xml文件的方式 原文:http://blog.csdn.net/snowjlz/article/details/8158560 1.利用Cla ...

  8. C#程序中:如何删除xml文件中的节点、元素。

    C#中动态的清理xml文件中的垃圾信息是程序员必会的哦.这就像数据库一样,不会清理数据怎么可以呢?其实xml文件就可以用作一个小的数据库,存储一些简单的信息.所以,用C#程序实现xml文件的增.删.改 ...

  9. selector是在文件夹drawable中进行定义的xml文件。

    获取Drawable对象: Resources res = mContext.getResources(); Drawable myImage = res.getDrawable(R.drawable ...

随机推荐

  1. pip freeze

    总结: 1.输出安装的包信息,并在另一个环境快速安装 Generate output suitable for a requirements file. $ pip freeze docutils== ...

  2. stress test - volume test

    D:\wamp64\bin\mysql\mysql5.7.11\bin>mysqlslap --delimiter=";" --query=" INSERT I N ...

  3. cross browse compatible

    不过我之前用过一个Chrome的插件叫浏览器兼容性检测工具,可以在内网测试,会自动监测网页的设计是否满足对应浏览器及版本的规范,不满足的话就会详细提示出来,不过有些过于专业性了,更适合开发人员查看,测 ...

  4. 洛谷P2602 数字计数 [ZJOI2010] 数位dp

    正解:数位dp 解题报告: 传送门! 打算在寒假把学长发过题解的题目都做辣然后把不会的知识点都落实辣! ⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄ 然后这道题,开始想到的时候其实想到的是大模拟,就有点像之前考试贪 ...

  5. zookeeper源码导入

    1 搭建步骤 1.1 到github中下载该项目 项目地址 https://github.com/apache/zookeeper.下载.zip包到本地解压. 解压后文件目录: 1.2 使用ant对源 ...

  6. thinkphp 如何查询数据库

    在控制器中使用M(); 数据表: 一.查询方式 1.字符串作为条件 2.使用索引数组作为条件查询条件 //可以更改逻辑关系 $condition['_logic'] = 'OR'; 二.表达式查询 三 ...

  7. 获取Let`s Encrypt证书的三种方式

    1,acme.sh 方式 1)获取acme脚本 curl https://get.acme.sh | sh 2)开始获取证书 acme.sh强大之处在于,可以自动配置DNS,不用去域名后台操作解析记录 ...

  8. 菜刀php过waf

    关于PHP 一.waf为啥会拦截菜刀.菜刀在连接时,会向server端POST数据,抓包查看: 会看到他向server端post了 @eval(base64_decode($_POST[z0]));  ...

  9. unittest之suite测试集(测试套件)

    suite 这个表示测试集,不要放在class内,否则会提示"没有这样的测试方法在类里面 ",我觉得它唯一的好处就是调试的时候可以单独调试某个class而已,我一般不用它,调试时可 ...

  10. 转载 vsftpd安装

    http://blog.csdn.net/shutfuckingup/article/details/8250290 1:安装vsftpd    yum install vsftpd 2:关闭防火墙 ...