【问题标题】:Xalan XSLT Stream HTML output to browserXalan XSLT 将 HTML 输出流式传输到浏览器
【发布时间】:2013-11-27 08:31:21
【问题描述】:

我们正在使用 Xalan XSLT 进行 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 变大。

我如何做到这一点? Xalan XSLT 支持吗?是否有任何其他 XSLT 解析器支持它。

非常感谢您的建议。

【问题讨论】:

    标签: java xml xslt xalan


    【解决方案1】:

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

    编辑:但是,可以使用 Saxon 的扩展 - 看看它们。

    至于更长的答案,XSLT 处理器的流式处理能力已经取得了一些进展,但结果似乎还无法预测。例如,请参阅此链接:http://www.balisage.net/Proceedings/vol5/html/Kay01/BalisageVol5-Kay01.html,了解有关在 Saxon 中实施 Streaming 的尝试。

    假设 XSLT 3.0 建议将包含这个问题:

    此版本语言更改的主要目的是 使转换能够在流模式下执行,其中 源文件和结果文件都没有保存在 完整的记忆。

    有关更多信息,请参阅http://www.w3.org/TR/xslt-30/。不过,这只是一个工作草案。

    编辑:对于特别是 Xalan 的流媒体,Michael Kay 写道:

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

    这是取自 Incremental/streaming XSLT transformations? ,可追溯到 2012 年。似乎 StreamSource 不是流媒体,真的。

    【讨论】:

    • 感谢您的回复。快速提问,那么 new StreamSource(in), new StreamResult(out) 的目的是什么?抱歉,我是 XSLT 的新手。我认为 StreamSource(in) 意味着 XML 可以流式传输,即逐个标签生成标签,不是吗?我假设 StreamResult(out) 会做类似的事情,即流式传输可用的 HTML 输出? Xalan 中的“增量变换”实现了什么?非常感谢您的回复。
    • 明白了,所以如果我在生成 XML 之前正确阅读它,则无法将输出或结果 HTML 写入浏览器,对吗?我的印象是,如果整个 xml 中的一个标记完成,则可以开始转换并且 StreamResult(out) 可以开始向浏览器写入响应,所以我错了,我猜那是 Saxon-EE?非常感谢您的建议。
    • 是的,完全正确。作为最后一个提示,saxon.sourceforge.net/#F9.4EE 明确指出Saxon-EE 具有合理的流式传输能力。最后,让用户等待响应可能比购买 Saxon-EE 并调整您的系统更便宜。 [如果对您有帮助,请不要忘记接受此答案,请在左侧打勾。]
    猜你喜欢
    • 2010-10-11
    • 2013-04-18
    • 2012-07-02
    • 2017-11-09
    • 2010-09-14
    • 2012-02-17
    • 2016-05-30
    • 2014-05-29
    • 2014-11-10
    相关资源
    最近更新 更多