【问题标题】:Print a DOM tree with Java?用 Java 打印 DOM 树?
【发布时间】:2014-11-08 02:16:33
【问题描述】:

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

例如:

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

【问题讨论】:

  • 为什么不直接打印 (X)HTML?
  • 如果你坚持重新创建一个 DOM-to-XML 序列化器(大多数 XML 解析器都带有一个;检查他们的示例程序),网络上应该有很多来自其他人的示例. tree-walk 是标准且简单的(特别是因为 DOM 是一个双向链接的树,所以你甚至不需要递归)。

标签: java html dom jsoup


【解决方案1】:

这是解析和打印的代码。

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());
    }
  }

}

来源:edited the code given here

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2016-04-02
      • 2013-05-11
      • 1970-01-01
      • 2012-02-20
      • 1970-01-01
      • 2012-06-07
      • 2010-09-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多