我有以下java代码:
DocumentBuilder db=DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc=db.parse(new File("/opt/myfile"));
并/opt/myfile包含以下内容:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE archive SYSTEM "../../schema/xml/schema.dtd"> ...
我收到以下错误:
java.io.FileNotFoundException: /../schema/xml/schema.dtd (No such file or directory)
这是一个大型java框架,它使用其他地方生成的XML文件.我认为相对路径是问题所在.我不认为在JVM启动之前更改cwd是可以接受的(路径来自JVM本身读取的配置文件),并且我没有找到在JVM运行时更改cwd的方法.如何使用适当的DTD解析此XML文件?
dog*_*ane 18
您需要使用自定义EntityResolver来调整DTD的路径,以便可以找到它.例如:
db.setEntityResolver(new EntityResolver() {
@Override
public InputSource resolveEntity(String publicId, String systemId)
throws SAXException, IOException {
if (systemId.contains("schema.dtd")) {
return new InputSource(new FileReader("/path/to/schema.dtd"));
} else {
return null;
}
}
});
Run Code Online (Sandbox Code Playgroud)
如果schema.dtd在您的类路径上,您可以使用getResourceAsStream它来加载它,而不指定完整路径:
return new InputSource(Foo.class.getResourceAsStream("schema.dtd"));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16476 次 |
| 最近记录: |