之前写过一篇利用正则表达式处理标签的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