Java Xalan XSLT将HTML流输出到浏览器

Java Xalan XSLT将HTML流输出到浏览器,java,xml,xslt,xalan,Java,Xml,Xslt,Xalan,我们使用XalanXSLT进行XSL转换以生成HTML输出,即XML+XSL=HTML 下面是代码 out=response.getOutputStream(); TransformerFactory factory = TransformerFactory.newInstance(); Transformer transformer = factory.newTransformer() transformer.transform(new StreamSource(in), new Stream

我们使用XalanXSLT进行XSL转换以生成HTML输出,即XML+XSL=HTML

下面是代码

out=response.getOutputStream();
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer()
transformer.transform(new StreamSource(in), new StreamResult(out));
我不希望在数据显示在浏览器上之前完成整个转换。我希望具有HTML输出的StreamResult开始向浏览器发送数据,因为它在单个XML节点上执行xsl转换/xsl应用模板,这样用户就可以在生成时在浏览器上看到一些东西,因为报告XML可能很大

我怎样才能做到?XalanXSLT支持吗?是否有其他XSLT解析器支持它


非常感谢您的建议。

简短的回答是不,使用Xalan无法可靠地实现这一点

编辑:不过,对Saxon进行扩展可能是可行的-看看它们

至于较长的答案,XSLT处理器的流式处理功能已经取得了一些进展,但结果似乎还太不可预测。例如,请参阅此链接:有关在Saxon中实现流的尝试的讨论

假设XSLT 3.0建议将包含以下问题:

该语言版本中更改的主要目的是 要在流模式下执行转换,请执行以下操作: 源文档和结果文档均未保存在中 完整的记忆

有关这方面的更多信息,请参阅。不过,这只是一份工作草案

编辑:Michael Kay特别为Xalan的流媒体服务写道:

Xalan中的增量转换实际上并没有阻止它的构建 将整个源文档作为一棵树存储在内存中;它所做的只是允许 要与转换过程并行构建的树。如果 如果您想要流式转换,Saxon EE是您唯一实用的 选项[……]


这是从2012年开始拍摄的。看起来流源不是流媒体,真的。

谢谢你的回复。快速提问,那么新StreamSource(in)和新StreamResult(out)的目的是什么?对不起,我是XSLT新手。我认为StreamSource(in)意味着XML可以流式传输,即逐个标记生成,不是吗?我假设StreamResult(out)也会做类似的工作,即在HTML输出可用时对其进行流式处理?Xalan中的“增量转换”实现了什么?我很感激您的回复。明白了,所以如果我在生成XML之前正确阅读它,那么输出或结果HTML无法写入浏览器,对吗?我的印象是,如果整个xml中的一个标记完成,转换可以开始,StreamResult(out)可以开始向浏览器写入响应,所以我错了,我猜这就是Saxon EE?谢谢你的建议。是的,没错。作为最后一个提示,明确指出
Saxon EE
能够合理地进行流式处理。最终,让用户等待响应可能比购买Saxon EE并调整系统更便宜。[如果对您有帮助,请不要忘记接受此答案,左侧的勾号。]