首页

关于googlecode源码中对xml字符串文本内容进行压缩XmlCompressor实现源码说明

标签:googlecode,xml文本压缩,XmlCompressor,htmlcompressor,去除空格     发布时间:2018-06-08   

一、前言

关于htmlcompressor源码包中com.googlecode.htmlcompressor.compressor.XmlCompressor、com.googlecode.htmlcompressor.compressor.Compressor定义XML文本压缩接口及实现类,可以对空格、回车、换行及注释等进行过滤压缩处理。

二、源码说明

1.Compressor接口

package com.googlecode.htmlcompressor.compressor;@b@@b@public abstract interface Compressor@b@{@b@  public abstract String compress(String paramString);@b@}

2.XmlCompressor实现类

package com.googlecode.htmlcompressor.compressor;@b@@b@import java.text.MessageFormat;@b@import java.util.ArrayList;@b@import java.util.List;@b@import java.util.regex.Matcher;@b@import java.util.regex.Pattern;@b@@b@public class XmlCompressor@b@  implements Compressor@b@{@b@  private boolean enabled;@b@  private boolean removeComments;@b@  private boolean removeIntertagSpaces;@b@  protected static final String tempCdataBlock = "%%%COMPRESS~CDATA~{0,number,#}%%%";@b@  protected static final Pattern cdataPattern = Pattern.compile("<!\\[CDATA\\[.*?\\]\\]>", 34);@b@  protected static final Pattern commentPattern = Pattern.compile("<!--.*?-->", 34);@b@  protected static final Pattern intertagPattern = Pattern.compile(">\\s+<", 34);@b@  protected static final Pattern tagEndSpacePattern = Pattern.compile("(<(?:[^>]+?))(?:\\s+?)(/?>)", 34);@b@  protected static final Pattern multispacePattern = Pattern.compile("\\s+(?=[^<]*?>)", 34);@b@  protected static final Pattern tagPropertyPattern = Pattern.compile("(\\s\\w+)\\s*=\\s*(?=[^<]*?>)", 2);@b@  protected static final Pattern tempCdataPattern = Pattern.compile("%%%COMPRESS~CDATA~(\\d+?)%%%", 34);@b@@b@  public XmlCompressor()@b@  {@b@    this.enabled = true;@b@@b@    this.removeComments = true;@b@    this.removeIntertagSpaces = true;@b@  }@b@@b@  public String compress(String xml)@b@  {@b@    if ((!(this.enabled)) || (xml == null) || (xml.length() == 0)) {@b@      return xml;@b@    }@b@@b@    List cdataBlocks = new ArrayList();@b@@b@    xml = preserveBlocks(xml, cdataBlocks);@b@@b@    xml = processXml(xml);@b@@b@    xml = returnBlocks(xml, cdataBlocks);@b@@b@    return xml.trim();@b@  }@b@@b@  protected String preserveBlocks(String xml, List<String> cdataBlocks)@b@  {@b@    Matcher matcher = cdataPattern.matcher(xml);@b@    int index = 0;@b@    StringBuffer sb = new StringBuffer();@b@    while (matcher.find()) {@b@      cdataBlocks.add(matcher.group(0));@b@      matcher.appendReplacement(sb, MessageFormat.format("%%%COMPRESS~CDATA~{0,number,#}%%%", new Object[] { Integer.valueOf(index++) }));@b@    }@b@    matcher.appendTail(sb);@b@    xml = sb.toString();@b@@b@    return xml;@b@  }@b@@b@  protected String returnBlocks(String xml, List<String> cdataBlocks)@b@  {@b@    Matcher matcher = tempCdataPattern.matcher(xml);@b@    StringBuffer sb = new StringBuffer();@b@    while (matcher.find())@b@      matcher.appendReplacement(sb, Matcher.quoteReplacement((String)cdataBlocks.get(Integer.parseInt(matcher.group(1)))));@b@@b@    matcher.appendTail(sb);@b@    xml = sb.toString();@b@@b@    return xml;@b@  }@b@@b@  protected String processXml(String xml)@b@  {@b@    xml = removeComments(xml);@b@@b@    xml = removeIntertagSpaces(xml);@b@@b@    xml = removeSpacesInsideTags(xml);@b@@b@    return xml;@b@  }@b@@b@  protected String removeSpacesInsideTags(String xml)@b@  {@b@    xml = multispacePattern.matcher(xml).replaceAll(" ");@b@@b@    xml = tagPropertyPattern.matcher(xml).replaceAll("$1=");@b@@b@    xml = tagEndSpacePattern.matcher(xml).replaceAll("$1$2");@b@    return xml;@b@  }@b@@b@  protected String removeIntertagSpaces(String xml)@b@  {@b@    if (this.removeIntertagSpaces)@b@      xml = intertagPattern.matcher(xml).replaceAll("><");@b@@b@    return xml;@b@  }@b@@b@  protected String removeComments(String xml)@b@  {@b@    if (this.removeComments)@b@      xml = commentPattern.matcher(xml).replaceAll("");@b@@b@    return xml;@b@  }@b@@b@  public boolean isEnabled()@b@  {@b@    return this.enabled;@b@  }@b@@b@  public void setEnabled(boolean enabled)@b@  {@b@    this.enabled = enabled;@b@  }@b@@b@  public boolean isRemoveComments()@b@  {@b@    return this.removeComments;@b@  }@b@@b@  public void setRemoveComments(boolean removeComments)@b@  {@b@    this.removeComments = removeComments;@b@  }@b@@b@  public boolean isRemoveIntertagSpaces()@b@  {@b@    return this.removeIntertagSpaces;@b@  }@b@@b@  public void setRemoveIntertagSpaces(boolean removeIntertagSpaces)@b@  {@b@    this.removeIntertagSpaces = removeIntertagSpaces;@b@  }@b@}
<<推荐下载>>
  • (1) 阿里巴巴Java开发手册8种不同版本
  • (2) Web前端开发视频教程
  • (3) 30+明星讲师PPT课件分享一线大厂架构实战经验
  • (4) java开发_架构篇_视频资源分享_v2208
  • (5) java开发_高级篇_视频资源分享_v2208
  • (6) java开发_进阶篇(中级)_视频资源分享_v2208
  • (7) java开发_入门篇_视频资源分享_v2208
  • (8) 微信小程序开发视频1+167源码+实战demo等下载
  • (9) easy-shopping电子商务java源码(附脚本和安装文档说明)下载
  • (10) java常用的72份知名实用的电子书下载
  • (11) java开发性能优化资料整理大全(8份电子文档+3份实战优化)下载
  • (12) 9个常用的算法设计资料和100以上视频课件内容下载
  • (13) vue开发必备常用手册16件下载
  • (14) 21种不同技术集群方案(es、flink、redis、nginx、zk、lvs、kafka、mysql、k8s等)参考资料下载
  • (15) 20种技术代码规范(js/java/dba/阿里/华为/oracle/mysql等)参考资料下载
  • (16) 微服务五套资料(0-1,架构设计,springcloud,nacos等)下载
  • (17) 架构师(28知识图谱+3套简历模板+6套架构实战文档等)完整资料整理下载
  • (18) 大数据18套实战基础知识+8套简历模板下载
  • (19) 并发编程全套(7套+阿里巴巴+亿级实战等)实战资料下载
  • (20) Kafka九套学习整理知识点全套(面试+笔记+代码api+命令+容备等)资料下载
  • (21) java全套9个不同方向类型的面试题(基础+核心+大厂+架构师+近万套题库等)下载
  • (22) JAVA开发常用API帮助文档大全(超52种以上技术资料,高手必备)下载
  • (23) springcloud超详细139件全套学习实战资料( 视频课件+源码demo+文档资料等)下载
  • 更多推荐>>
  • <<热门文章>>