Java 使用tagsoup构建DOM文档

Java 使用tagsoup构建DOM文档,java,html,parsing,dom,Java,Html,Parsing,Dom,我做不了汤。我正在使用下面的代码,但是当我打印解析器返回的节点(带有System.err.println(doc)的行)时,我总是得到“[#document:null]” 我不知道如何在这段代码中找到bug,也不知道问题的根源。请帮忙 public final Document parseDOM(final File fileToParse) { Parser p = new Parser(); SAX2DOM sax2dom = null; org.w3c.dom.Node doc

我做不了汤。我正在使用下面的代码,但是当我打印解析器返回的节点(带有System.err.println(doc)的行)时,我总是得到“[#document:null]”

我不知道如何在这段代码中找到bug,也不知道问题的根源。请帮忙

public final Document parseDOM(final File fileToParse) {
  Parser p = new Parser();
  SAX2DOM sax2dom = null;
  org.w3c.dom.Node doc  = null;

  try { 

        URL url = new URL("http://stackoverflow.com/");
        p.setFeature(Parser.namespacesFeature, false);
        p.setFeature(Parser.namespacePrefixesFeature, false);
        sax2dom = new SAX2DOM();
        p.setContentHandler(sax2dom);
        p.parse(new InputSource(new InputStreamReader(url.openStream())));
        doc = sax2dom.getDOM();
        System.err.println(doc);
  } catch (Exception e) {
     // TODO handle exception
     e.printStackTrace();
  }


  return doc.getOwnerDocument();
 }

您的解析器正在工作,但无法打印出这样的节点。打印节点及其所有子节点的最简单方法是使用如下XML序列化程序:

          Writer out = new StringWriter();
          XMLSerializer serializer = new XMLSerializer(out, new OutputFormat());
          serializer.serialize(doc);
          System.out.println(out.toString());

getOwnerDocument
上的文档中:

如果此节点是尚未与任何文档一起使用的文档或文档类型,则此节点为空


由于您的案例中的
getDOM
应该返回
文档
,因此您可以简单地强制转换返回值或将
doc
的类型更改为
Document

您是对的,我不知道Node.tostring打印父文档。无论如何,我现在的问题是获取文档而不是节点。。。由于doc.getOwnerDocument()返回null(我认为这是获取文档的正确方法),所以将其转换为这样:
return(Document)doc
我阅读了该文档,但我没有意识到该文档是Node的子接口-现在我了解了大局,谢谢