用Java打印DOM树?

用Java打印DOM树?,java,html,dom,jsoup,Java,Html,Dom,Jsoup,我使用Jsoup库构建了一个解析算法。有没有办法用Java打印DOM树 例如: <HTML/> <HEAD/> <TITLE/> <BODY/> <H1/> <H2/> <P/> 谢谢您的回答,但我决定从HTML文件中删除所有纯文本并将其转换为XML。以下是解析和打印的代码 import java.lang.reflect.Field; import java.lan

我使用Jsoup库构建了一个解析算法。有没有办法用Java打印DOM树

例如:

<HTML/>
  <HEAD/>
    <TITLE/>
  <BODY/>
    <H1/>
    <H2/>
    <P/>


谢谢您的回答,但我决定从HTML文件中删除所有纯文本并将其转换为XML。

以下是解析和打印的代码

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;

import javax.servlet.http.HttpServletResponse;

import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class Main {

  public static void printTree(Node doc) {
    if (doc == null) {
      System.out.println("Nothing to print!!");
      return;
    }
    try {
      System.out.println(doc.getNodeName() + "  " + doc.getNodeValue());
      NamedNodeMap cl = doc.getAttributes();
      for (int i = 0; i < cl.getLength(); i++) {
        Node node = cl.item(i);
        /*
        System.out.println("\t" + node.getNodeName() + " ->" + node.getNodeValue());
        //You don't need value
        */
        System.out.println("\t" + node.getNodeName());
      }
      NodeList nl = doc.getChildNodes();
      for (int i = 0; i < nl.getLength(); i++) {
        Node node = nl.item(i);
        printTree(node);
      }
    } catch (Throwable e) {
      System.out.println("Cannot print!! " + e.getMessage());
    }
  }

}
import java.lang.reflect.Field;
导入java.lang.reflect.InvocationTargetException;
导入java.lang.reflect.Method;
导入java.util.ArrayList;
导入java.util.array;
导入java.util.HashSet;
导入java.util.List;
导入java.util.Locale;
导入java.util.Map;
导入java.util.Set;
导入javax.servlet.http.HttpServletResponse;
导入org.w3c.dom.NamedNodeMap;
导入org.w3c.dom.Node;
导入org.w3c.dom.NodeList;
公共班机{
公共静态void打印树(节点文档){
如果(doc==null){
System.out.println(“无需打印!!”;
返回;
}
试一试{
System.out.println(doc.getNodeName()+“”+doc.getNodeValue());
NamedNodeMap cl=doc.getAttributes();
对于(int i=0;i“+节点.getNodeValue());
//你不需要价值
*/
System.out.println(“\t”+node.getNodeName());
}
NodeList nl=doc.getChildNodes();
对于(int i=0;i

来源:

为什么不直接打印(X)HTML?如果你坚持要重新创建DOM到XML序列化程序(大多数XML解析器都有一个,请查看他们的示例程序),那么在web上应该有很多其他人的例子。树遍历是标准且简单的(特别是因为DOM是一个双链接树,所以您甚至不需要递归)。