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#面向对象编程\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 方法前,不会写入元素和特性。

时间: 2024-10-10 16:15:29

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

基于Java的XML文件模拟数据库进行增删改查操作

我们知道XML文件既可以用来进行数据的传输,也可以配合DTD约束文件用来作为配置文件,当然其本质就是一个加了标签以及众多空格保持格式的字符串,那么就可以用Java进行操作. 本例是使用MyEclipse带入DOM4j解析时要用的jar包的基础上做的:当然DOM4j相对于DOM SAX 等解析方式的方便程度是不言而喻的. 下面是本次用例XML文件 <?xml version="1.0" encoding="UTF-8"?> <persons> 

java中采用dom4j解析xml文件

一.前言 在最近的开发中用到了dom4j来解析xml文件,以前听说过来解析xml文件的几种标准方式:但是从来的没有应用过来,所以可以在google中搜索dmo4j解析xml文件的方式,学习一下dom4j解析xml的具体操作. 二.代码详情    dom4j是一个第三方开发组开发出的插件,所以在我们使用dom4jf的时候我们要去下载一下dom4j对应版本的jar导入在我们项目中.  1)xml文件: <?xml version="1.0" encoding="UTF-8&

Android中解析与创建XML文件

Android中解析与创建XML文件 在Android中对XML的操作有多种方式,常见的有三种方式:SAX.DOM和PULL方式. DOM方式会把整个XML文件加载到内存中,在PC上常使用DOM的方式. 但是在性能敏感的设备上,主要采用的是SAX的方式,但是缺点是嵌套多个分支的时候处理不是很方便. 而PULL的方式类似SAX方式,同样很节省内存. 因此,本文章中只提供PULL的方式解析与创建XML文件. 基础类 本例中使用的实体类的定义如下: public class CAddress impl

InputStream流解析 XML文件

1 // 根据InputStream流解析 XML文件 2 private void getNewsFromStream(InputStream is){ 3 // 1.创建XML pull 解析器 谷歌内置解析器 4 XmlPullParser xp = Xml.newPullParser(); 5 try { 6 //2.指定解析器要解析的文件 和解析文件所用到的编码方式 7 xp.setInput(is,"utf-8"); 8 //3.开始解析文件(在解析之前需要有 JavaBe

PHP操作XML文件学习笔记

原文:PHP操作XML文件学习笔记 XML文件属于标签语言,可以通过自定义标签存储数据,其主要作用也是作为存储数据. 对于XML的操作包括遍历,生成,修改,删除等其他类似的操作.PHP对于XML的操作方式很多,这次学习的是通过DOMDocument进行操作,其他的操作方法可以参考 http://www.oschina.net/code/snippet_110138_4727 1.对XML文件的遍历 通过DOMDocument对于XML文件的操作的方法:首先要实例化一个DOMDocument类的对

xml文件操作

一.xml文件操作1.了解xml文件的SAX解析方式 1.1SAX解析XML  //第一步:解析xml的对象  //工厂模式   SAXParser parser = SAXParserFactory       .newInstance()       .newSAXParser();  //第二步:获得xml文件   InputStream is = getResources().openRawResource(R.raw.shu);  //第三步: 处理器   DefaultHandler

python解析xml文件操作的例子

python解析xml文件操作实例,操作XML文件的常见技巧. xml文件内容: <?xml version="1.0" ?> <!--Simple xml document__chapter 8--> <book> <title> sample xml thing </title> <author> <name> <first> ma </first> <last>

dedecms中提取的zip压缩文件操作类zip.class.php

从织梦DeDeCMS中提取的zip压缩文件操作类,包含zip文件压缩.解压缩.添加文件到压缩包中等多个实用的函数,注释详细方便使用. 下载:dedecms中提取的zip压缩文件操作类zip.class.php 包含的函数和简单的使用方法: 1.函数get_List($zip_name) ,函数作用:获取zip文件中的文件列表.函数参数 $zip_name  zip文件名.返回值 文件列表数组. 2.函数Add($files,$compact),函数作用:增加文件到压缩文件.函数参数 $files

nodejs用流来对文件操作

nodejs用流来对文件操作 by 伍雪颖 var fs = require('fs'); var reader = fs.createReadStream('in.txt'); var writer = fs.createWriteStream('out.txt'); reader.pipe(writer);