J'ai écrit une classe qui étend XmlUrlResolver pour résoudre les références aux identifiants publics dans les documents XML. Par exemple, lorsqu'un document XML commence par:Comment utiliser un XmlResolver personnalisé pour résoudre les identificateurs publics * dans * une DTD?
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE chapter PUBLIC "-//Custom//EN" "custom.dtd">
L'identifiant public « - // personnalisée/FR » est transmis au paramètre relativeURI
de ma overriden méthode ResolveUri()
, et résolu à l'emplacement de DTD réelle sur le disque. Cela fonctionne correctement.
Le problème se produit lorsqu'il existe une référence d'entité dans la DTD elle-même. Par exemple:
<!ENTITY % tablemodel
PUBLIC "-//OASIS//DTD XML Exchange Table Model 19990315//EN"
"soextblx.dtd">
Dans ce cas, l'identifiant du système "soextblx.dtd" est passé à ResolveUri()
au lieu de l'identifiant public "- // // DTD XML OASIS échange de table modèle 19990315 // EN".
Y a-t-il un moyen d'accomplir cela? Surcharger GetEntity()
ne semble pas fonctionner, car il est également passé l'identifiant du système.
Pourriez-vous ajouter le code dans votre cours? – Cine