我拥有从 java.io.InputStream
返回 org.w3c.dom.Document
返回的 XHTML 文档装入该文档的方法。
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 文件(例如 < code> http://pastebin.com/L2kHwggU )和 XHTML 网站测试了它。
但是,对于某些文件,例如“http://pastebin.com/v675yWSJ” rel=“nofollow”>>http://pastebin.com/v675yWSJ ,甚至像www.w3.org
这样的网站,在Document doc=builder.parse(is);
进入无限循环。
<强度 > EDIT: 强度 >
@Michael Kay发现了问题, 但我在等待他的解决方案。
其他可能的解决办法之一是无视《多哈发展宣言》:
domFactory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false)
谢谢你的帮助