将DTD放在包中的位置

Kum*_*rav 5 java xml dtd

我已经构建了一个包含DTD文件的jar.我想在外部应用程序中使用此jar,其中DTD文件将用于XML文件.

我的问题是如何使我的dtd文件(在.jar文件中)可以从xml访问?

正如我们在其他配置文件中所说的那样,例如struts hibernate等,我们在xml中定义DTD,它包含在.jar文件中.我想在我的jar文件中做同样但不能弄清楚方法,请帮忙.

Ren*_*ink 3

您可以实施一个org.xml.sax.EntityResolver

public class MyResolver implements EntityResolver {

    public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException {
       if (systemId.contains("my.dtd")) {
           InputStream myDtdRes = getClass().getResourceAsStream("/com/yourcompany/my.dtd");
           return new InputSource(myDtdRes);
       } else {
           return null;
       }
    }
}
Run Code Online (Sandbox Code Playgroud)

并将其与您的DocumentBuilder.setEntityResolver()

 DocumentBuilder docBuilder = ...
 docBuilder.setEntityResolver(new MyResolver());
Run Code Online (Sandbox Code Playgroud)