我有这个方法,它从java.io.InputStream
返回的org.w3c.dom.Document
.
private Document loadDocFrom(InputStream is) throws SAXException,
IOException, ParserConfigurationException {
DocumentBuilderFactory domFactory = DocumentBuilderFactory
.newInstance();
domFactory.setNamespaceAware(true); // never forget this
DocumentBuilder builder = domFactory.newDocumentBuilder();
Document doc = builder.parse(is);
is.close();
return doc;
}
这种方法有效,我已经用一些 XHTML 文档(例如http://pastebin.com/L2kHwggU
)和 XHTML 网站对其进行了测试。
但是,对于一些文件,比如这个http://pastebin.com/v675yWSJ甚至是类似的网站www.w3.org
,它在Document doc = builder.parse(is);
.
编辑:
@Michael Kay 发现了问题,但我正在等待他的解决方案。
其他可能的解决方案之一是忽略 DTD:
domFactory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false)
谢谢您的帮助。