gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 09:40:51 25 4
gpt4 key购买 nike

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

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

最佳答案

好吧,在对调试器和源代码进行一些调整之后,我在 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());

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

关于java - 为 document() 缓存 Java XSLT 处理器 (Xalan) 的提取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9240512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com