繁体   English   中英

解析具有相对DTD的XML文件,而无需显式指定其路径

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM