增量/流式 XSLT 转换?

3
我通常使用JDK(JDK 7)中的XSLT支持进行XSLT转换。最近,我遇到了一个非常大的XML文档,即使应用基本的XSLT转换也会使用很多内存。
我一直小心谨慎地处理所有的流程,但是似乎JDK中的XSLT引擎(似乎是修改过的Xalan)总是首先在内存中构建DOM。显然,这不是我想要的。
现在我发现,可分别下载的Xalan(来自2007年的2.7.1版本!)确实具有执行增量转换的API。虽然它似乎可以工作,但实际上我希望我的代码在原始的JDK上运行,而不需要告诉用户去改变任何认证文件夹。
在Java中进行增量XSLT转换的最佳方法是什么,以便我的代码与未经修改/原始JDK安装兼容?
更新: 这个最近更新的问题与之密切相关:What is the Most Efficient Java-Based streaming XSLT Processor?

请尝试此链接 - http://www.devx.com/xml/Article/34677/1954 - 查看标题为“迭代2:分治 JAXP XSLT 转换”的部分。 - kjp
2个回答

2

我已经关注XSLT 3.0几年了,但像许多XML倡议一样,它似乎在2007/2008年左右就停滞不前了。还有人在继续为它做工作吗? - dexter meyers
1
@dextermeyers:我认为2007年时XSLT 3.0还没有开始。是的,W3C XSLT WG正在进行XSLT 3.0的积极工作。当前的草案(仍被称为2.1)在此处:http://www.w3.org/TR/xslt-21/。可能会在接下来的几个月(甚至本月)发布更新的草案。 - Dimitre Novatchev
单个Saxon-EE许可的价格为300英镑(如果您不需要XQuery,则价格更低)。8000英镑的报价是站点许可证的价格。 - Michael Kay
2
在XSLT 3.0中,关于流处理的工作还在进行中。虽然已经有一段时间没有公开的工作草案了,但这并不意味着工作已经停止。然而,如果能有更多的实现者参与进来,进展会更快。 - Michael Kay
如果你为这14个开发人员组织了几次团队午餐,你将需要不少的费用——你的公司必须决定哪个更有价值。 - Dimitre Novatchev
显示剩余7条评论

2
首先,我强烈建议使用Apache版本的Xalan和Xerces而不是JDK捆绑的版本,因为它们非常容易出错。这对Xerces尤其如此。
其次,如果您正在使用Java,则应该转向XSLT 2.0,这可以大大提高开发生产力。实际上,这意味着使用Saxon(Saxon Home Edition是免费的)。
在Xalan中进行增量转换实际上并不能阻止它将整个源文档作为树形结构存储在内存中,它只是允许树形结构与转换过程同时建立。如果您想要流式转换,则Saxon-EE是您唯一的实际选择。(请注意,saxon:stream()扩展仅是Saxon提供的流式功能的一小部分)。

实际上,这意味着Saxon - 我以为Xalan支持XSLT 2.0,难道不是这样吗? - dexter meyers
1
@dextermeyers:我不知道是否有任何Xalan XSLT 2.0的实现。IBM作为WebSphere的一部分提供了商业XSLT 2.0实现。 - Dimitre Novatchev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接