我必须使用Java中的XSLT处理具有DTD的XML文件.DTD确实是必需的,因为它包含我使用的实体的定义.(旁白:是的,使用实体来处理可能使用unicode的东西是一个坏主意;-)
当我运行转换时,它每次都从外部源下载DTD.我想它使用XML目录缓存的DTD,所以我给了TransformerFactory一个CatalogResolver为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);
Run Code Online (Sandbox Code Playgroud)
但是当我运行转换时,它仍然通过网络下载DTD.(使用Xalan和Xerces作为Java5的一部分或独立使用或使用Saxon和Xerces.)
强制转换只使用DTD的本地副本需要什么?