在相当多的情况下,咱们写入XML文件默认是使用文本格式来写入的,如果XML内容是通过网络传输,或者希望节省空间,特别是对于XML文档较大的情况,是得考虑尽可能地压缩XML文件的大小。

XmlDictionaryWriter类从XmlWriter类派生,它公开了一些静方法,可以直接创建基于文本、二进制和MTOM格式的XML写入对象。文本格式就不多说了,就是直接把XML内容写入文件,二进制和MTOM相似,都对文件内容进行压缩,说白了,是输出为纯字节形式。MTOM常用于读写SOAP消息。

我们可以做个例子来比较一下,看看以文本方式写入XML,以及以二进制方式写入XML,它们之间的差别有多大。

首先,定义一个枚举,用于决定是使用文本格式写入还是二进制格式写入。

    public enum WriteFormat
{
Text,
Binary
}

然后写一个SaveXmlToFile方法,第一个参数是要保存的XML文件的路径,第二个参数是刚刚定义的枚举,用于确定写入格式。

        public void SaveXmlToFile(string filepath,  WriteFormat fmt)
{
using (FileStream fs = new FileStream(filepath, FileMode.OpenOrCreate, FileAccess.Write))
{
// 创建Writer
XmlDictionaryWriter writer = null;
if (fmt == WriteFormat.Text)
writer = XmlDictionaryWriter.CreateTextWriter(fs);
else
writer = XmlDictionaryWriter.CreateBinaryWriter(fs); // 写入文档声明
writer.WriteStartDocument(); // 写入根节点
writer.WriteStartElement("宠物");
// 写入宠物子节点
writer.WriteStartElement("名字"); // <名字>
writer.WriteString("荷兰兔");
writer.WriteEndElement(); // </名字>
writer.WriteStartElement("年龄"); // <年龄>
writer.WriteString("");
writer.WriteEndElement(); // </年龄>
// 直接Flush
writer.Flush(); writer.Dispose();
}
}

直接调用XmlDictionaryWriter的CreateXXXWriter方法,就可以得到一个XmlDictionaryWriter实例,XXX就看你要用的格式了,有Text、Binary、Mtom三种。

当使用非文本格式写入XML时,会把XML中的文本内容存到一个叫XmlDictionary的对象来存放字符串映射,可以手动指定XmlDictionary对象,其中存放的每个字符串实例都可以用XmlDictionaryString实例来包装。

如果我们不指定XmlDictionary实例,则Writer会自动创建,并把XML文档中的所有字符串对象(命名空间、元素名、特性名,以及文本节点的内容等)都放到XmlDictionary中映射为二进制内容。

如果后面没有要写入的内容了,可以直接调用Flush方法,它不仅可以把缓冲的内容写入流中,而且会自动补全XML元素的结束标签。

现在分别以文本格式和二进制格式写入XML文件。doc1.xml文件是文本格式写入的,doc2.xml是用二进制格式写入的,对比结果如下。

相同的内容,用文本格式保存,需要99个字节,而使用二进制格式则需要36个字节。

用记事本打开用二进制格式保存的XML文档,会看到如下内容。

打开文本格式保存的文件,可以直接看到内容。

好了,今天的废话就讲到这里吧,开饭了。

【.net 深呼吸】使用二进制格式来压缩XML文档的更多相关文章

  1. 关于XML文档的讲解

    1        XML的概述 1.1 什么是XML XML全称为Extensible Markup Language,意思是可扩展的标记语言.XML语法上和HTML比较相似,但HTML中的元素是固定 ...

  2. XML文档结构

    <?xml version="1.0" encoding="UTF-8"?> <books> <bool id="bk1 ...

  3. Anakia 转换xml文档为其他格式

    一.简介 Anakia 使用JDOM 和Velocity将XML文档转换为特定格式的文档 二.解析xml文档方法 1.DOM java jdk,xml-api.jar 需要加载整个xml文档来构建层次 ...

  4. java将XML文档转换成json格式数据

    功能 将xml文档转换成json格式数据 说明 依赖包:1. jdom-2.0.2.jar : xml解析工具包;2. fastjson-1.1.36.jar : 阿里巴巴研发的高性能json工具包 ...

  5. (转载)将一段符合XML格式规范字符串插入已有XML文档当中

    想我们已经存在一个XML文档,结构如下:   < xmlversion="1.0"encoding="utf-8">< employees&g ...

  6. 编写Java程序,使用 dom4j 创建一个 XML 文档,文档名为“city.xml”。注意该文档的格式和数据

    查看本章节 查看作业目录 需求说明: 使用 dom4j 创建一个 XML 文档,文档名为"city.xml".该文档的格式和数据如图所示 实现思路: 创建Java项目,添加dom4 ...

  7. Python之xml文档及配置文件处理(ElementTree模块、ConfigParser模块)

    本节内容 前言 XML处理模块 ConfigParser/configparser模块 总结 一.前言 我们在<中我们描述了Python数据持久化的大体概念和基本处理方式,通过这些知识点我们已经 ...

  8. 【转】Python之xml文档及配置文件处理(ElementTree模块、ConfigParser模块)

    [转]Python之xml文档及配置文件处理(ElementTree模块.ConfigParser模块) 本节内容 前言 XML处理模块 ConfigParser/configparser模块 总结 ...

  9. ElementTree之Xml文档处理

    ElementTree: 表示整个XML层级结构 Element: 表示树形结构中所有的父节点 SubElement: 表示树形结构中所有的子节点 有些节点既是父节点,又是子节点 下面来看下这两个类的 ...

随机推荐

  1. 【小程序分享篇 一 】开发了个JAVA小程序, 用于清除内存卡或者U盘里的垃圾文件非常有用

    有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...

  2. 【CSS进阶】伪元素的妙用--单标签之美

    最近在研读 <CSS SECRET>(CSS揭秘)这本大作,对 CSS 有了更深层次的理解,折腾了下面这个项目: CSS3奇思妙想 -- Demo (请用 Chrome 浏览器打开,非常值 ...

  3. InnoDB关键特性学习笔记

    插入缓存 Insert Buffer Insert Buffer是InnoDB存储引擎关键特性中最令人激动与兴奋的一个功能.不过这个名字可能会让人认为插入缓冲是缓冲池中的一个组成部分.其实不然,Inn ...

  4. mysql 7下载安装及问题解决

    mysql 7安装及问题解决 一.mysql下载 下载地址:https://www.mysql.com/downloads/ Community (GPL) Downloads MySQL Commu ...

  5. 谈谈一些有趣的CSS题目(五)-- 单行居中,两行居左,超过两行省略

    开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉 ...

  6. H5坦克大战之【玩家控制坦克移动2】

    周一没有看圣诞大战,这几天比较忙也没有看赛后的报道,今天就先不扯NBA,随便扯扯自己.昨天在电脑里找东西的时候翻到以前兼职健身教练时的照片,思绪一下子回到学生时代,脑子久久换不过来.现在深深觉得健身和 ...

  7. PHP-----文件系统的交互

    本文讲解php中于文件交互中所使用的函数 代码示例 <html> <head> <title> File Detail </title> </he ...

  8. C# Entity Framework并发处理

    原网站:C# Entity Framework并发处理 在软件开发过程中,并发控制是确保及时纠正由并发操作导致的错误的一种机制.从 ADO.NET 到 LINQ to SQL 再到如今的 ADO.NE ...

  9. 负载均衡——nginx理论

     nginx是什么? nginx是一个强大的web服务器软件,用于处理高并发的http请求和作为反向代理服务器做负载均衡.具有高性能.轻量级.内存消耗少,强大的负载均衡能力等优势.  nginx架构? ...

  10. 浏览器的兼容模式下的button中文字垂直方向不居中显示

    <button style="cursor:pointer;vertical-align: middle;" >删除</button> 这时候垂直不居中. ...