jsoup处理html标签分享

之前写过一篇利用正则表达式处理标签的blog使用正则表达式处理html标签方案分享,感觉正则效率高些,但是一些复杂的文本对于正则表达式要求较高,大概看了下jsoup的解决方式,很轻便,效率上虽然不如正则表达式,但是贵在上手容易,所以就写了个样板供大家参考,写的不好请大家轻喷哦,如下:


import org.apache.commons.lang.StringUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Node;
import org.jsoup.safety.Whitelist;
import org.jsoup.select.NodeTraversor;
import org.jsoup.select.NodeVisitor;

/**
* @ClassName: HtmlTaghandleUtil
* @Description: 处理img标签
* @author YYYong
* @date 2016年5月25日 上午9:22:33
* 
*/
public class HtmlTaghandleUtil
{

	static Whitelist whitelist = new Whitelist()
	.addTags("b", "br", "cite", "code", "em", "i", "ol", "pre", "q",
			"small", "strike", "sub", "sup", "u")
	.addAttributes("span", "style").addAttributes("a", "href", "title");
	
	public static String imgTagFix(String content) {

		if(StringUtils.isEmpty(content))
		{
			return "";
		}
		Document doc = Jsoup.parseBodyFragment(content);
		BrVisitor formatter = new BrVisitor();
		NodeTraversor traversor = new NodeTraversor(formatter);
		traversor.traverse(doc);
		doc.outputSettings().prettyPrint(false);
		doc.outputSettings().outline(false);
		String cont = Jsoup.clean(doc.body().html(), whitelist);
		return cont;
	}

	private static class BrVisitor implements NodeVisitor {

		@Override
		public void head(Node arg0, int arg1)
		{
			
		}

		@Override
		public void tail(Node node, int depth)
		{
			String name = node.nodeName();
			if ("img".equalsIgnoreCase(name)) {
				String title = node.attr("title");
				if(!StringUtils.isEmpty(title))
				{
					node.after(title);
				}
				else
				{
					String src = node.attr("src");
					if(!StringUtils.isEmpty(src))
					{
						node.after("{{" + src + "}}");
					}
				}
			}
		}
	}
}

测试的话,大家写个main函数就可以了,也可以参考上一篇blog

作者声明:有问题请联系794465942@qq.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值