【问题标题】:Caching fetches of Java XSLT processor (Xalan) for document()为 document() 缓存 Java XSLT 处理器 (Xalan) 的提取
【发布时间】:2012-03-03 16:10:19
【问题描述】:

我在 JDK 1.6 (Xalan) 中使用 XSLT 处理器,并广泛使用 document() 函数从从 Web 下载的文档中检索数据项。此处理是作为呈现网页的工作的一部分完成的,当前每次提供页面时都会调用它。我知道有多种方法可以优化来自同一个 XSLT 脚本的同一个 document() 的多个评估,但我更关心的是减少网络上的点击量;也就是说,我想缓存要检索的外部文档(也因为我在尝试检索其中一些文档时经常会超时)。

我想(希望)Xalan 有一个用于检索外部文档的可插入类,我可以拦截它以注入我的缓存策略,但我在文档或浏览源中找不到它。有人可以指出它是否存在以及如何配置?谢谢。

【问题讨论】:

    标签: java function document xalan


    【解决方案1】:

    好吧,在对调试器和源代码进行一些调整后,我在 javadocs 中找到了一个指针,而我在 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());
    

    应该对 href 和 base 进行更精细的处理,我认为在相对 URL 的情况下,但在我的情况下不需要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-02
      • 1970-01-01
      • 2018-09-19
      • 2013-12-06
      • 2014-09-04
      • 2012-01-04
      • 2018-09-22
      • 2012-02-22
      相关资源
      最近更新 更多