Java XSLT转换中newTransformer和newTemplates之间的区别

Adr*_*ith 8 java xml xslt saxon

在Java中,从TransformerFactory用于创建对象到处理XSLT,它具有以下方法:

  • newTransformer它创建了 Transformer对象,可以将XML转换为结果.
  • newTemplates它创建了Templates可以创建的对象Transformer.

Transformer明确说明的文档:

变压器可以多次使用.

我的应用程序使用相同的XSLT处理各种不同的XML.在程序开始时,我用newTransformer它创建一个Transformer然后重新使用它来处理所有XML(确保它是同步的,所以我只在一个线程中使用它;并reset()在每次处理之前调用它的方法.).

这样我就不会为每个XML I进程重新编译XSLT.

那么这个newTemplatesTemplates对象的重点是什么?我应该使用它,并Transformer为每个XML 创建一个新对象吗?

ksc*_*eid 6

主要区别在于Templates线程安全而Transformer不是.此外,文档意味着可以在创建Templates实例期间应用性能优化.因此,Templates实例的初始创建可能会更昂贵,但实际使用可以提供性能提升.如果您已经不得不手动管理同步和重置,我会说Templates请求您的注意......


Mic*_*Kay 6

如果你在单个线程中运行,那么你可能不会注意到很多差异.

性能总是取决于实现而不是API规范.使用Saxon,当您重用Transformer时,它会保留使用doc()函数加载的文档的缓存.这可能是好的或坏的,这取决于下一个转换是否将访问相同的源文档.一般来说,我的建议是为每个转换使用一个新的Transformer,但当然使用相同的Templates对象.