htmlparser中自定义html标签进行解析
原文出处:http://www.mzone.cc/article/270.html
?? htmlparser是一个基于java的用来解析html页面的开源组件,可以很方便对html页面进行标签分析、动态修改、删除特定的html标签等。但有些时候,我们可能需要自定义非HTML标签实现一些额外的功能,比如我经常使用htmlparser解析并处理页面后需要返回最终的处理结果,一般情况下我们获取html这个根标签,然后toHtml()就可以得到了。但如果页面本身就不规范,没有或包含多个html根标签呢?这样就会出现数据遗漏的情况,我这里就来讲下我的处理过程:
1、自定义一个根标签
2、将解析到的HTML内容使用根标签进行包裹
3、再使用htmlparser解析包裹的结果字符串并处理
4、获取自定义的根标签并返回标签内部的内容
5、输出最终的自定义标签的内部内容即可完整输出
????? 首先,我们定义一个我们自己的html标签,在htmlparser中自定义标签需要继承CompositeTag类,该类非常简单,只需要覆写基类的getIds方法即可,如下:
?
????? 然后我们就可以对这个内容进行分析和处理,等分析处理完成后,就需要获取最终的处理html内容,使用如下代码片段来获取:
package cc.mzone.html; /** * 获取最终的过滤结果 * @param root * @return * @throws Exception */public String getFinalResult(Node root) throws Exception { String result = root.toHtml(); int len = ContainerTag.HTML_CONTAINER_TAG_NAME.length(); return result.substring(len + 2, result.length() - len - 3);}?
????? 其中root节点就是我们在getRootNode中得到的根节点,也就是我们自定义的html标签,在这个方法中我们仅仅是去掉这个节点的名称而已,从而也就实现了我们想要的目标。使用这个自定义标签可以非常好的解决html格式不标准的问题,从而可以兼容更多的情况和场合。
?