【问题标题】:Tell JAXP the path to DTD file告诉 JAXP DTD 文件的路径
【发布时间】:2015-05-03 05:38:34
【问题描述】:

我有一个引用 dtd 文件的 xml 文件。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE varman SYSTEM "referenced.dtd">
...

我设法使用 JAXP 读取了这些文件,但前提是 referenced.dtd 与 xml 文件位于同一文件夹中。否则,我会收到无法加载 dtd 文件的异常。而且我找不到插入处理程序或任何东西来解决这个缺失资源的地方。请赐教!

【问题讨论】:

  • 你使用 sax 还是 dom ?请注意,除非您使用诸如目录系统之类的实体解析器,否则您将无法根据实际找到 DTD 的位置来分派对 DTD 的访问。您可以使用绝对 URI 并使 DTD 在该位置可用。

标签: java exception-handling path dtd jaxp


【解决方案1】:

使用属性设置允许外部路径:

添加错误处理程序以捕获不受支持的属性:

public boolean isNewPropertySupported() {
       try {
           SAXParserFactory spf = SAXParserFactory.newInstance();
           SAXParser parser = spf.newSAXParser();
           parser.setProperty("http://javax.xml.XMLConstants/property/accessExternalDTD", "file");
       } catch (ParserConfigurationException ex) {
           fail(ex.getMessage());
       } catch (SAXException ex) {
           String err = ex.getMessage();
           if (err.indexOf("Property 'http://javax.xml.XMLConstants/property/accessExternalDTD' is not recognized.") > -1)
           {
             //expected, jaxp 1.5 not supported
             return false;
           }
       }
       return true;
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-05
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    相关资源
    最近更新 更多