近段时间在做一个页面的解析程序,以前本来一直都在用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;
}
}
}

解决方案 »

  1.   

    package lrt.util;import java.io.StringWriter;import javax.xml.transform.Transformer;
    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信息!";
    }
    }