使DocumentBuilder.parse忽略DTD引用當我在這個方法中解析我的xml文件(變量f)時,我收到一個錯誤C:\ Documents and Settings \ joe \ Desktop \ aicpcudev \ OnlineModule \ map.dtd(系統(tǒng)找不到指定的路徑)我知道我沒有dtd,也不需要它。如何在忽略DTD引用錯誤的同時將此File對象解析為Document對象?private static Document getDoc(File f, String docId) throws Exception{
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(f);
return doc;}
3 回答

慕虎7371278
TA貢獻1802條經(jīng)驗 獲得超4個贊
builder.setEntityResolver(new EntityResolver() { @Override public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException { if (systemId.contains("foo.dtd")) { return new InputSource(new StringReader("")); } else { return null; } } });
我發(fā)現(xiàn)只返回一個空的InputSource也能正常工作?

眼眸繁星
TA貢獻1873條經(jīng)驗 獲得超9個贊
我發(fā)現(xiàn)DTD文件與XML一起出現(xiàn)在jar文件中的問題。我根據(jù)這里的例子解決了這個問題,如下: -
DocumentBuilder db = dbf.newDocumentBuilder();db.setEntityResolver(new EntityResolver() { public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException { if (systemId.contains("doc.dtd")) { InputStream dtdStream = MyClass.class .getResourceAsStream("/my/package/doc.dtd"); return new InputSource(dtdStream); } else { return null; } }});
添加回答
舉報
0/150
提交
取消