使用tagsoup构建DOM文档

时间:2010-11-02 16:51:14

标签: java html parsing dom

我无法使TagSoup工作。我正在使用下面的代码,但是当我打印解析器返回的Node(带有System.err.println(doc);的行)时,我总是得到“[#document:null]”。

我不知道如何在此代码中找到错误,或者无论是哪个问题,都是问题的根源。请帮忙!

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

2 个答案:

答案 0 :(得分:3)

来自getOwnerDocument的文档:

  

如果此节点是尚未与任何文档一起使用的Document或DocumentType,则为null。

由于您的案例中的getDOM应返回Document,您只需转换返回值或将doc的类型更改为Document

答案 1 :(得分:1)

您的解析器正在运行,但您无法打印出类似的节点。打印节点及其所有子节点的最简单方法是使用XML Serializer,如下所示:

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