最近在做一个手机APP,通过一个新闻抓取程序抓取新闻,然后通过APP展示新闻。后发现手机端不支持Style标签,如果网页中有Style标签,则标签内的内容会显示处理非常影响页面美观。于是就写了一个用NekoHTML来清除Style标签的工具类

html.filter.properties 配置文件,配置允许的标签和要删除的标签及标签内的属性

attributes=style,id,name,class,width,height,src,oldsrc,complete,align,alt,title
acceptTags=div,span,a,li,ul,nav,br,p,img,font,b,strong,table,tr,td
removeTags=style

PropertiesUtils 读取Properties

package com.tiamaes.gjds.util;import java.io.IOException;
import java.util.Properties;import org.springframework.core.io.ClassPathResource;/**  * <p>类描述: 读取Properties中的属性 </p>* <p>创建人:王成委  </p>* <p>创建时间:2015年1月28日 上午11:23:27  </p>* <p>版权说明: © 2015 Tiamaes </p>*/
public class PropertiesUtils {private Properties properties;public PropertiesUtils(String path){try {ClassPathResource resource = new ClassPathResource(path);properties = new Properties();properties.load(resource.getInputStream());} catch (IOException e) {e.printStackTrace();}}public String get(String key){return this.properties.getProperty(key);}}

过滤HTML中的标签

package com.tiamaes.gjds.util;import java.io.CharArrayReader;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;import org.apache.xerces.xni.parser.XMLDocumentFilter;
import org.cyberneko.html.filters.ElementRemover;
import org.cyberneko.html.filters.Writer;
import org.cyberneko.html.parsers.DOMParser;
import org.xml.sax.InputSource;/**  * <p>类描述: 过滤Html中的标签 </p>* <p>创建人:王成委  </p>* <p>创建时间:2015年1月29日 上午10:45:02  </p>* <p>版权说明: © 2015 Tiamaes </p>*/
public class HtmlFilterUtils {private static PropertiesUtils properties = null;private static HtmlFilterUtils filter = null;private String configPath = "html.filter.properties";private static final String ATTRIBUTE_FIELD = "attributes";private static final String ACCEPT_TAGS_FIELD = "acceptTags";private static final String REMOVE_TAGS_FIELD = "removeTags";private List<String> attributes = new ArrayList<String>();private List<String> acceptTags = new ArrayList<String>();private List<String> removeTags = new ArrayList<String>();private static synchronized void syncInit(){if(filter == null)filter = new HtmlFilterUtils();}public static HtmlFilterUtils getInstance(){return getInstance(false);}public static HtmlFilterUtils getInstance(boolean createNew){if(createNew)return new HtmlFilterUtils();if(filter == null){syncInit();}return filter;}private HtmlFilterUtils(){if(properties == null){properties = new PropertiesUtils(configPath);}this.addToList(attributes, properties.get(ATTRIBUTE_FIELD));this.addToList(acceptTags, properties.get(ACCEPT_TAGS_FIELD));this.addToList(removeTags, properties.get(REMOVE_TAGS_FIELD));}public void addAtributes(String attrName){this.attributes.add(attrName);}public void removeAtributes(String attrName){this.attributes.remove(attrName);}public void addRmoveTag(String tagName){this.removeTags.add(tagName);}public void removeRmoveTag(String tagName){this.removeTags.remove(tagName);}public void addAcceptTag(String tagName){this.acceptTags.add(tagName);}public void removeAcceptTag(String tagName){this.acceptTags.remove(tagName);}private void addToList(List<String> list,String sources){if(list == null) list = new ArrayList<String>();String[] sourcesArray = sources.split(",");for(String str:sourcesArray){list.add(str);}}public String doFilter(String htmlCode){ElementRemover remover = new ElementRemover();String[] atrrs = new String[attributes.size()];for(String tag : acceptTags)remover.acceptElement(tag,attributes.toArray(atrrs));for(String tag : removeTags)remover.removeElement(tag);CharArrayReader reader = null;String result;try {StringWriter filteredDescription = new StringWriter();Writer writer = new Writer(filteredDescription,"UTF-8");XMLDocumentFilter[] filters = {remover,writer};DOMParser parser = new DOMParser();reader = new CharArrayReader(htmlCode.toCharArray());InputSource inputSource = new InputSource(reader);parser.setProperty("http://cyberneko.org/html/properties/filters", filters);parser.parse(inputSource);result = filteredDescription.toString();} catch (Exception e1) {e1.printStackTrace();result =  htmlCode;}try {reader.close();} catch (Exception e) {e.printStackTrace();}return result;}
}

调用doFilter可以过滤HTML的内容

使用NekoHtml处理网页(删除Style标签)相关推荐

  1. HTML中的style标签怎么写,html style标签是什么意思?关于style标签的使用方

    本篇文章主要讲的是html style标签的定义和属性介绍,先让我们了解style标签在HTML中的一些用途和位置,然后介绍了使用中的一些方法和细节技巧,让我们一起来看看吧 html style标签的 ...

  2. python爬取疫情信息html.xpath p标签_python xpath 如何过滤div中的script和style标签

    爬取一个页面中的div,想获取div中的文字,我是这么写的: selector.xpath('//div[@class="text-con"]').xpath('string(.) ...

  3. [PHP] JQuery+Layer实现添加删除自定义标签代码

    JQuery+Layer实现添加删除自定义标签代码 实现效果如下: 实现代码如下: <!doctype html> <html> <head> <meta c ...

  4. html 标签 r语言,从R中的字符串中删除html标签

    我正在尝试将网页源代码读入R并将其作为字符串处理.我正在尝试删除段落并从段落文本中删除html标签.我遇到了以下问题: 我尝试实现一个功能来删除html标签: cleanFun=function(fu ...

  5. 删除a标签下面的横线

    在HTML中我们经常会使用a标签跳转链接,但是会发现a标签下面出现一个横线特别难看,给大家一种删除a标签下面横线的方法. 删除a标签下面横线使用: text-decoration: none; 效果示 ...

  6. 三星文档html删除吗,HTML5新增标签和删除的标签

    一.新增标签 结构标签 相当于有意义的div标签 article:用于定义一篇文章 header:定义页面的头部 footer: nav:导航条链接 section:定义一个区域 aside:定义页面 ...

  7. HTML页面的主体标签是什么,html网页的主体标签是什么

    html网页的主体标签是:body标签.body标签是一个网页的身体部分,用于定义网页的主体内容,是一个HTML文档中必须的部分.在<body>和</body>中放置的是网页中 ...

  8. 零基础学Web 04(style标签)

    零基础学Web 04 style元素 定义 <style>标签用于为HTML文档定义样式信息. 属性 实例 <!DOCTYPE html> <html> <h ...

  9. 零基础CSS入门教程(6)–style标签与注释

    点此查看 所有教程.项目.源码导航 本文目录 1. 前言 2. style标签 3. CSS注释 4. HTML注释与CSS注释的区别 5. 小结 1. 前言 特别喜欢毛主席的一些文章,例如<论 ...

  10. 在style标签中,vue项目引入style文件,外部css文件

    在style标签中,vue项目引入style文件,外部css文件 一.css是什么? 二.使用步骤 1.使用style标签引入 2.在style标签内使用@import导入 总结 一.css是什么? ...

最新文章

  1. Xamarin.Forms使用Slider注意问题
  2. Linux 利用lsof命令恢复删除的文件
  3. spring源码分析之spring-jdbc模块详解
  4. 奇异递归模板模式(Curiously Recurring Template Pattern,CRTP)
  5. 如何不使用Java 8默认方法
  6. 静茹docker容器的几种方法_1-容器和docker基础知识
  7. stm32 485和232可以用同一个串口吗_STM32的复用时钟何时开启?
  8. Animator忽视TimeScale
  9. SpringFox Swagger2注解基本用法
  10. 数学建模之统计回归模型详解
  11. HTML从入门到精通
  12. WORD自动生成目录,目录中页码链接到正文的页码
  13. 关于在ElasticSearch中使用now函数进行时间范围过滤查询的问题
  14. dna计算机 论文,科学网—阿德勒曼DNA计算机(科普) - 沈海军的博文
  15. 如何写一个好的缺陷(Defect)报告
  16. Python 网易云音乐 MV 下载
  17. 《C语言及程序设计》实践参考——n=a!+b!+c!
  18. 自我保健很重要:先付钱
  19. Oracle一个诡异的临时表空间不足的问题
  20. 打开新世界大门,测试人可以用Chrome插件干什么?

热门文章

  1. NB-SVM strong linear baseline
  2. 【php毕业设计】基于php+mysql的学生签到考勤系统设计与实现(毕业论文+程序源码)——学生签到考勤系统
  3. 暑假学习打卡【2】——北理工乐学第一周第二周作业
  4. 初装Windows11无法打开Windows安全中心主界面
  5. 电脑telnet工具如何开启
  6. 机器学习中分类和聚类的区别
  7. 数据流分析之WorkList Algorithm
  8. 大量监控视频如何存储?
  9. 最新手机号正则表达式验证方法(scala版)
  10. adobe acrobat pro字体很怪,有点发虚,不整齐,调整方法