由于感觉程序效率比较低,所以决定改一下提取文字这部分的实现过程,在网上看到一个朋友写的办法,如下:
public String getTextInNode(Node node){
StringBuffer sb=new StringBuffer();
try{
getText(sb,node);
}catch(Exception e){
e.printStackTrace();
}
return sb.toString();
}
public void getText(StringBuffer sb, Node node) {
if (enabledNode(node)) {
if (node.getNodeType() == Node.TEXT_NODE) {
String value = node.getNodeValue();
sb.append(value.trim());
} else {
NodeList nodes = node.getChildNodes();
for (int i = 0; i < nodes.getLength(); i++) {
Node n = nodes.item(i);
getText(sb, n);
}
}
}
}
public boolean enabledNode(Node node) {
if (node.getNodeName().equalsIgnoreCase("script"))
return false;
else if (node.getNodeName().equalsIgnoreCase("link"))
return false;
else if (node.getNodeName().equalsIgnoreCase("style"))
return false;
else if (node.getNodeType() == Node.COMMENT_NODE)
return false;
else
return true;
}
第一个函数为调用的主方法。如果要分析dom树里所有的节点的话,则可以先用一个parser解析html页面后将body传给getTextInNode()方法。以上代码本人稍有修改,不是最优。欢迎评论