java - 缓存 document() 的 Java XSLT 处理器 (Xalan) 的获取

标签 java function document xalan

我使用 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/

相关文章:

java - 使用springboot和Caffeine缓存可以存储多少缓存?

javascript - 用逗号和特殊字符输入乘法

c# - 有没有办法在机器上没有word的情况下动态生成word文档

java - 试图理解为什么线程会在 Eclipse 中被阻塞?

java - 覆盖配置文件中的 maven 依赖范围

java - 我如何从源代码中获取 "export"这个 Eclipse 插件?

javascript - 我的 resetSize() 函数有什么问题? (JavaScript)

c - 在 C 中使用文字值与计算值时答案不正确

C,函数没有被调用,原型(prototype)在 main() 之前

MongoDB : How to update a new field value according to existing field value in each document?