[英]Parsing an XML file with a relative DTD without specifying its path explicitly
我遇到了这里遇到的相同问题:我想解析一个XML文件,该文件包含DTD文件的相对路径,例如:
<?xml version="1.0"?>
<!DOCTYPE convert SYSTEM "someRules.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;
}
}
});
我不想显式地编写schema.dtd
和/path/to/schema.dtd
,而是将其获取XML文件(在我的情况下为someRules.dtd
),然后在XML文档中指定的路径中动态搜索它。 。 当我以后决定更改someRules.dtd
的位置时,这避免了必须更改Java代码的情况。 我只需要移动someRules.dtd
并在XML文档中调整其路径即可。
我怎样才能做到这一点?
您不应在xml中指定任何DTD的绝对路径。
如果确实需要这样做(出于测试目的),则整个路径将存储在resolveEntity函数的systemId字符串中。
if(systemId.endsWith(".dtd")){
return new InputSource(new FileReader(systemId));
}
只要dtd在您的计算机上可用,它就应该起作用,但这是糟糕的设计。
您应该将DTD目录文件作为替代解决方案
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.