PageReleaser需要一种HTML的压缩算法,Google了很久,发现如果只是简单去除空白和注释的话,使用XLinq就可以轻易的实现

先看看MSDN是怎么说的:

一种常用方案是读取缩进的 XML,在内存中创建一个没有任何空白文本节点(即不保留空白)的 XML 树,对该 XML 执行某些操作,然后保存带缩进的 XML。在序列化带格式的 XML 时,只保留 XML 树中有意义的空白。这是 LINQ to XML 的默认行为。

另一个常见的情况是读取和修改已经有意缩进的 XML。您可能不想以任何方式更改这种缩进。若要在 LINQ to XML 中执行此操作,您要在加载或解析 XML 时保留空白,并在序列化 XML 时禁用格式设置。

简单的说,XDocument载入时,默认使用LoadOptions::None,自动去掉XML的空白;保存时,默认使用SaveOptions::None,自动格式化XML。

也就是说,使用XDocument将一个HTML文档打开什么也不作就保存,其实等于实现了HTML的格式化。

而如果在保存时,使用SaveOptions::DisableFormatting参数,看似要保存XML的空白,由于载入时所有空白都被删掉了,其实等于删除了所有空白,于是去掉空白就这样实现了。

至于删掉注释也很简单,只是需要注意,一般页面嵌入JavaScript会使用注释节点包裹,需要例外处理。

整个HTML压缩代码如下:

var nodes = from s in doc.DescendantNodes()
           where s.NodeType == XmlNodeType.Comment &&
           string.Compare( s.Parent.Name.LocalName, "script", true ) != 0
           select s;

nodes.Remove();
doc.Save( sm.OutputPath + "index.html", SaveOptions.DisableFormatting );

简单吧,不过HTML不能直接使用XML解析器,需要预先转换为XHTML,点击察看转换实现。

实现HTML的简单压缩相关推荐

  1. 实验验证离散余弦变换和简单压缩应用,显示对应的原图,dct图和恢复的图像

    实验验证离散余弦变换和简单压缩应用,显示对应的原图,dct图和恢复的图像 离散余弦变换 压缩 离散余弦变换 import cv2 import numpy as np import matplotli ...

  2. Python使用zlib对数据进行简单压缩处理

    Python对数据进行简单压缩处理 在Python丰富的库中,也有着对数据进行压缩处理的库(zlib).对于需要数据压缩的应用程序,此模块中的功能允许使用zlib库进行压缩和解压缩. (本文只对简单的 ...

  3. 教你如何简单压缩过大的PDF文件

    PDF文件现在广泛应用于各大办公场所,只要有办公的地方就可以看到PDF文件,文件都有大小之分,PDF文件也不例外,遇到过大的文件该怎么呢,小编教你如何简单压缩过大的PDF文件! 操作方法要借助压缩软件 ...

  4. opencv之图片简单压缩

    一.简单常用 #include <opencv2/opencv.hpp> #include<iostream> #include <math.h> #include ...

  5. java实现简单压缩与解压缩功能

    ZIP是一种很常见的压缩形式,在java中要实现ZIP的压缩主要用到的是java.util.zip这个包里面的类. 这个包里主要有ZipFile. ZipOutputStream.ZipInputSt ...

  6. zip学习笔记 —— 用C编写的简单压缩库

    一.简介 基于 miniz 的用C语言编写的可移植的.简单的 zip 库.Miniz 是一个无损的.高性能的数据压缩库,位于一个源文件中.只需要简单的接口来附加缓冲区或文件到当前的 zip 条目. 二 ...

  7. php怎么压缩文字,php实现的简单压缩英文字符串的代码

    PHP,适应于上帖简单加密后的密文 //replacement来自上个版本的加密替换 function compress_func($match) {return strlen($match[0]). ...

  8. fis简单压缩、合并使用方法,fis基本使用

    1.基本用法 fis install: 命令安装fis仓库提供的各种 组件.框架.示例.素材.配置等 开发资源. fis release: 命令用于编译并发布的你的项目,拥有多个参数调整编译发布操作. ...

  9. php缓存页面,PHP缓存页面函数的简单示例

    这篇文章主要为大家详细介绍了PHP缓存页面函数的简单示例,具有一定的参考价值,可以用来参考一下. 对PHP缓存页面函数感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! /** * PHP缓 ...

  10. mac怎么压缩pdf文件大小?

    mac怎么压缩pdf文件大小?pdf文件压缩后还是太大怎么办?无论是什么文件,一旦文件体积过大就会很麻烦.比如一份PDF文件比较大,网速不好的话传输就很慢.遇到这种情况,我们可以选择对这样的PDF文件 ...

最新文章

  1. 【Keras】Linux一个shell脚本安装python、keras、tensorflow、anaconda等~
  2. React Native
  3. 如何在Windows Defender中安排扫描
  4. 利用F#库canopy进行UI测试
  5. 递归——阶乘加斐波那契数列(简单掌握递归思想的敲门砖)
  6. 学校计算机教室的用途,录播教室有什么功能,又有哪些用途
  7. 新款iPad,抱回家!
  8. Linux系统格式化发fat32U盘密令,用diskpart命令格式化u盘为fat32的方法
  9. matlab曲线拟合 新浪,Matlab曲线拟合
  10. [2013.9.15]关于string::nops为什么是-1
  11. 人类再次彻底败给 AI!
  12. java 下载项目中的文件_java 下载web项目目录下的文件
  13. Java练习 SDUT-1294_选票统计
  14. 在一起计时器_拥有计时器的四个怪兽,一个从杰克身上拿的,一个差点打死赛罗...
  15. “坦克大战”小游戏(C语言)源代码及其详解注释
  16. 苹果ttc转ttf_iOS使用自定义字体的方法(内置和任意下载ttf\otf\ttc字体文件)
  17. 复制网站zencart模板的方法
  18. 父亲母亲-山里老房子
  19. 京东到家大数据平台架构演进实战
  20. 在.NET5 中读取Excel文件,评估下参加神秘献祭会的几位子民

热门文章

  1. 智能点餐mysql框架图_SpringBoot微信点餐系统--P3数据库设计
  2. 什么是云主机,云主机是什么样的?
  3. 记一次github 翻车事件
  4. Kalman滤波在温度测量中的应用(含MATLAB仿真)
  5. 什么农村大学生大多混得比较差-第一性原理分析
  6. 守望先锋战网服务器维护多长时间,守望先锋国服压力测试多长时间 压力测试删档吗等问题解答...
  7. jt808终端鉴权_GitHub - SmallChi/JT808: JT808协议、GB808协议、道路运输车辆卫星定位系统-北斗兼容车载终端通讯协议(支持2013、2019版本)...
  8. phython入门基础
  9. phython学习第二天
  10. h5跳转到 苹果 ios app store 应用商店 的APP详情页面