我无法使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();
}
答案 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());