为了账号安全,请及时绑定邮箱和手机立即绑定

使DocumentBuilder.parse忽略DTD引用

使DocumentBuilder.parse忽略DTD引用

BIG阳 2019-08-17 16:20:03
使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;}
查看完整描述

3 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

与@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也能正常工作?


查看完整回答
反对 回复 2019-08-17
?
眼眸繁星

TA贡献1873条经验 获得超9个赞

我发现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;
         }
      }});


查看完整回答
反对 回复 2019-08-17
  • 3 回答
  • 0 关注
  • 794 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信