大型 xml 的 Xsl 转换
我知道在 java 中将 XSL 转换应用于 XML 的方法
javax.xml.transform.Transformer
此方法非常适合小型 XML 数据。但是,当涉及到大型 XML 数据时,由于内存限制,基于 DOM 的方法很难使用,这就变成了一场噩梦。
我想知道将 XSL 转换应用于大型 XML 的最佳方法是什么。有没有在 SAX 上运行而不是 DOM 上运行的变压器?
I am aware of ways of applying XSL transformation to XMLs in java using
javax.xml.transform.Transformer
This approach works well for small XML data. But when it comes to large XML data where DOM based approach is difficult to use because of memory constraints, this becomes a nightmare.
I want to know what is the best approach to apply XSL transformation to large XMLs. Is there any transformer which operates on SAX and not DOM?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
Java 中的 XSLT 处理器有不同的实现来实现 JAXP。 Saxon 9.3 是一个 XSLT 2.0 处理器,它还实现了 XSLT 3.0 工作草案的一些流功能,请参阅 http://www.saxonica.com/documentation/sourcedocs/streaming.xml。
即使您不使用最新的实验性 Saxon 9.3 功能,通常最好不要向处理器提供 DOMSource,而是通过提供 StreamSource 来让处理器使用自己的树实现。
There are different implementations of XSLT processors in Java that implement JAXP. Saxon 9.3 is an XSLT 2.0 processor that also implements some streaming features of the XSLT 3.0 working draft, see http://www.saxonica.com/documentation/sourcedocs/streaming.xml.
And even if you don't use the latest experimental Saxon 9.3 features it is usually a good idea not to feed a DOMSource to your processor but let the processor use its own tree implementation by feeding a StreamSource.
如果您正在使用巨大的 XSLT 和/或使用多个 XSLT,那么编译和缓存 xslt 是提高性能的一个不错的选择。本文介绍如何缓存 xslt
If you are working with huge XSLT and/or working with multiple XSLT's then compiling and caching the xslt is a good option to improve performance. This article explains how to cache xslt's