Я написал класс, расширяющий 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 Table Model 19990315//EN".
Есть ли способ сделать это? Переопределение GetEntity()
также не работает, потому что ему также передается системный идентификатор.