簡體   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