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