Java之提取html中的文本内容

使用lucene建立索引时,碰到文本是html类型的,但需要的是对其中文本内容进行分析并索引,html标签等应该排除在外,因此应该从html中提取文本内容

  • 思想如下:

使用jsoup对html文档进行解析,每个html标签(Element)、文本(TextNode)都抽象成一个Node,每一个Node都含有childNodes()方法来枚举其包含的Node,这里通过递归来提取文本内容,对于非TextNode的Node,我们遍历其孩子Node,对于TextNode我们直接返回结果。

其中jsoup的gradle依赖为compile 'org.jsoup:jsoup:1.11.3'

  • 编码如下:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Node;
import org.jsoup.nodes.TextNode;
import java.util.List;

class HtmlUtils{
    private static String extractText(Node node){
        /* TextNode直接返回结果 */
        if(node instanceof TextNode){    
            return ((TextNode) node).text();  
        }   
        /* 非TextNode的Node,遍历其孩子Node */
        List<Node> children = node.childNodes();   
        StringBuffer buffer = new StringBuffer();    
        for (Node child: children) {   
            buffer.append(extractText(child)); 
        }   
        return buffer.toString();
    }
    /* 使用jsoup解析html并转化为提取字符串*/
    public static String html2Str(String html){   
        Document doc = Jsoup.parse(html);    
        return extractText(doc);
    }
}
  • 使用方法:
HtmlUtils.html2Str(html);

你可能感兴趣的:(java)