Tengo que procesar los archivos XML que tienen una DTD con un XSLT en Java. La DTD es realmente necesaria porque contiene las definiciones de las entidades que uso. (a un lado: sí, usar entidades para cosas que podrían usar unicode es una mala idea ;-)Evitar la descarga de DTD cuando se utiliza XSLT, es decir, XML Transformer
Cuando ejecuto la transformación, descargo el DTD de la fuente externa todo el tiempo. Quiero que se utilice un catálogo XML para almacenar en caché los DTD así que me dio la TransformerFactory
un CatalogResolver
como URIResolver
:
URIResolver cr = new CatalogResolver();
tf = TransformerFactory.newInstance();
tf.setURIResolver(cr);
Transformer t = tf.newTransformer(xsltSrc);
t.setURIResolver(cr);
Result res = new SAXResult(myDefaultHandler());
t.transform(xmlSrc, res);
Pero cuando corro la transformación que sigue descarga los DTD través de la red. (Usando Xalan y Xerces como parte de Java5 o independiente o usando Saxon y Xerces.)
¿Qué se necesita para forzar la transformación para usar solo la copia local de los DTD?
+1 para resolver por su cuenta y compartir el resultado (en lugar de eliminar la pregunta, que también he visto). – Tomalak