Я написал класс, расширяющий XmlUrlResolver для разрешения ссылок на публичные идентификаторы в документах XML. Например, когда документ XML начинается с:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE chapter PUBLIC "-//Custom//EN" "custom.dtd">
Открытый идентификатор "- // Custom / EN" передается параметру relativeURI
моего переопределенного метода ResolveUri()
и разрешается в фактическое местоположение DTD на диске. Это работает правильно.
Проблема возникает, когда внутри самого DTD есть ссылка на сущность. Например:
<!ENTITY % tablemodel
PUBLIC "-//OASIS//DTD XML Exchange Table Model 19990315//EN"
"soextblx.dtd">
В этом случае системный идентификатор "soextblx.dtd" передается в ResolveUri()
вместо открытого идентификатора "- // OASIS // Модель таблицы DTD XML Exchange 19990315 // EN".
Есть ли способ сделать это? Переопределение GetEntity()
также не работает, поскольку ему также передается системный идентификатор.