猿问

使DocumentBuilder.parse忽略DTD引用

使DocumentBuilder.parse忽略DTD引用

当我在这个方法中解析我的xml文件(变量f)时,我收到一个错误

C:\ Documents and Settings \ joe \ Desktop \ aicpcudev \ OnlineModule \ map.dtd(系统找不到指定的路径)

我知道我没有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;}


BIG阳
浏览 803回答 3
3回答

慕虎7371278

与@anjanb建议的方法类似    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;             }         }     });我发现只返回一个空的InputSource也能正常工作?

眼眸繁星

我发现DTD文件与XML一起出现在jar文件中的问题。我根据这里的例子解决了这个问题,如下: -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;          }       }});
随时随地看视频慕课网APP

相关分类

Java
我要回答