如何判断我编写的 XSLT 3.0 是否确实在流式传输 XML?



就是它在锡上说的。

我是 XSLT 3.0 的新手。我很高兴尝试一下,因为我的大部分工作都涉及对大型XML文件的相对简单的操作。

我发现XML实际流式传输有几个必要条件,但我都不清楚它们是什么,并且对我编写XSLT的能力不太有信心(编译器是我最喜欢的调试工具(。

如何判断我编写的 XSLT 是否实际上是流式处理 XML,还是以非流式处理方式正常工作?

如果您请求流式传输(例如<xsl:mode streamable="yes"/>( 并使用 Saxon 9.8 或 9.9 EE(到目前为止唯一支持 XSLT 3 该部分的实现(,然后它将在样式表编译期间对您的代码进行可流式处理性分析,并通知您是否使用了它认为不可流式传输的任何构造。

至少如果您从命令行运行 Saxon,情况是这样。在 oXygen 内部,我认为您明确需要在 Saxon EE 特定的转换场景设置中请求要使用流式处理(请参阅 https://www.oxygenxml.com/doc/versions/21.1/ug-editor/topics/advanced-saxon-xslt-options-x-publishing2.html?hl=streaming 和"启用流式处理模式"选项(。

与大多数撒克逊配置一样,还可以选择使用配置文件 http://saxonica.com/html/documentation/configuration/configuration-file/。

如果您在代码中请求流式处理并从命令行运行 Saxon EE,那么如果它认为代码不可流式传输,则它将不会执行代码。

这是一个粗略的概述,有关详细信息,请参阅 http://saxonica.com/html/documentation/sourcedocs/streaming/。

此外,一旦你得到了流性分析,你可以在命令行上使用-t选项,它将显示哪个解析器用于哪个输入文档,以及是构建树还是使用流处理树。

根据我的经验,如果你想使用流,你需要重新学习如何使用 XSLT,如果你正在处理纯流,你可能习惯的许多技术(xsl:call-template,将节点存储在变量中(可能不起作用。通常有一种方法通过使用copy-of()和/或snapshot()将流式处理与传统的基于树的处理混合在一起。还有一些新功能,如累加器,有助于使代码可流式传输,例如,如果您使用它们而不是xsl:number或代替密钥。

最新更新