为文档()缓存Java XSLT处理器(Xalan)的回迁
我在JDK1.6(Xalan)中使用XSLT处理器,并广泛使用document()函数从从web下载的文档中检索数据项。此处理是作为呈现网页工作的一部分完成的,当前每次提供网页时都会调用它。我知道有很多方法可以从同一XSLT脚本优化同一文档()的多个求值,但我关心的是如何减少对web的影响;也就是说,我希望缓存要检索的外部文档(这也是因为我在尝试检索其中一些文档时经常会超时)为文档()缓存Java XSLT处理器(Xalan)的回迁,java,function,document,xalan,Java,Function,Document,Xalan,我在JDK1.6(Xalan)中使用XSLT处理器,并广泛使用document()函数从从web下载的文档中检索数据项。此处理是作为呈现网页工作的一部分完成的,当前每次提供网页时都会调用它。我知道有很多方法可以从同一XSLT脚本优化同一文档()的多个求值,但我关心的是如何减少对web的影响;也就是说,我希望缓存要检索的外部文档(这也是因为我在尝试检索其中一些文档时经常会超时) 我想(希望)Xalan有一个用于检索外部文档的可插入类,我可以截取它来注入缓存策略,但在文档或浏览源代码中找不到它。有人
我想(希望)Xalan有一个用于检索外部文档的可插入类,我可以截取它来注入缓存策略,但在文档或浏览源代码中找不到它。有人能告诉我它是否存在以及如何配置吗?谢谢。好吧,在调试程序和源代码爬网进行了一些调整之后,我在javadocs中找到了一个指针,这是我在Google中找不到的。实现这一技巧的类是,可以通过以下方式将其安装到变压器上:
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处理,但在我的情况下不需要