我使用 JDK 1.6 (Xalan) 中的 XSLT 处理器,并广泛使用 document() 函数从从 Web 下载的文档中检索数据项。此处理是作为呈现网页工作的一部分完成的,目前每次提供页面时都会调用它。我知道有多种方法可以优化来自同一个 XSLT 脚本的同一个 document() 的多次评估,但我关心的是减少网络上的点击;也就是说,我想缓存要检索的外部文档(也是因为我在尝试检索其中一些文档时经常遇到超时)。
我想(希望)Xalan 有一个用于检索外部文档的可插入类,我可以拦截它以注入(inject)我的缓存策略,但我在文档或浏览源中找不到它。有人可以指出它是否存在以及如何配置它吗?谢谢。
最佳答案
好吧,在使用调试器和源代码爬行进行一些调整之后,我在 javadoc 中找到了一个指针,而我在 Google 中没有找到它。执行此操作的类是 URIResolver ,可以通过以下方式安装到 Transformer:
import javax.xml.transform.Source;
import javax.xml.transform.TransformerException;
import javax.xml.transform.URIResolver;
import javax.xml.transform.stream.StreamSource;
public class CachedURIResolver implements URIResolver
{
@Override
public Source resolve (final String href, final String base)
throws TransformerException
{
// TODO: caching logic
return new StreamSource(href);
}
}
...
final Transformer transformer = transformerFactory.newTransformer(transformation);
transformer.setURIResolver(new CachedURIResolver());
我认为在相对 URL 的情况下应该对 href 和 base 进行更精细的处理,但在我的情况下不需要。
关于java - 缓存 document() 的 Java XSLT 处理器 (Xalan) 的获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9240512/