Muszę przetwarzać pliki XML, które mają DTD z XSLT w Javie. DTD jest naprawdę potrzebny, ponieważ zawiera definicje podmiotów, których używam. (poza: tak, używanie obiektów dla rzeczy, które mogą używać unicode, jest złym pomysłem ;-)Zapobieganie pobieraniu DTD podczas używania XSLT, tj. XML Transformer
Po uruchomieniu transformacji pobiera DTD ze źródła zewnętrznego za każdym razem. Chcę go użyć katalogu XML do buforować DTD więc dałem TransformerFactory
CatalogResolver
jak 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);
Ale kiedy uruchomić transformację nadal pobiera DTD przez sieć. (Używanie Xalan i Xerces jako części Java5 lub samodzielnej lub przy użyciu Saxona i Xerces.)
Co trzeba zrobić, aby wymusić transformację, aby używać tylko lokalnej kopii DTD?
+1 za samodzielne rozwiązanie i udostępnienie wyniku (w przeciwieństwie do usunięcia pytania, które również widziałem). – Tomalak