近段时间在做一个页面的解析程序,以前本来一直都在用parserHTML,后来发现nekohtml 效果要比这个parserhtml要好点,页面定位比较简单,可惜就是通过指定的xpath在找到节点的nodelist之后,成了一个标准的w3c NODE节点,这个节点目前我只能将里面的文本内容全部抓取出来,但如何还原node本身的html代码却不知道该如何下手了,现在就希望哪位大佬能给个方法用来得到node节点的html代码。这个是得到节点内容的代码。public static void printNodeList(NodeList list, StringBuffer sb){
if(list == null){
return;
}
for (int i = 0; i < list.getLength(); i++) {
Node node = list.item(i);
if (node.hasChildNodes()) { // 如果该节点含有子节点,表明它是一个Element。
printNodeList(node.getChildNodes(), sb); // 递归调用,操作该Element的子节点。
} else if (node.getNodeType() == Node.TEXT_NODE) { // 检查这个非Element节点是否是文本
sb.append(node.getNodeValue());
} else {
continue;
}
}
}
if(list == null){
return;
}
for (int i = 0; i < list.getLength(); i++) {
Node node = list.item(i);
if (node.hasChildNodes()) { // 如果该节点含有子节点,表明它是一个Element。
printNodeList(node.getChildNodes(), sb); // 递归调用,操作该Element的子节点。
} else if (node.getNodeType() == Node.TEXT_NODE) { // 检查这个非Element节点是否是文本
sb.append(node.getNodeValue());
} else {
continue;
}
}
}
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;import org.w3c.dom.Node;public class NodeToHtml {
public static String toString(Node node) {
if (node == null)
throw new IllegalArgumentException();
Transformer transformer = TransformerFactory.newInstance()
.newTransformer(); if (transformer != null) {
try {
StringWriter sw = new StringWriter();
transformer
.transform(new DOMSource(node), new StreamResult(sw));
return sw.toString();
} catch (TransformerException te) {
throw new RuntimeException(te.getMessage()); }
}
return "不能生成html信息!";
}
}