我正在研究在 XSL 中使用流式传输的用例。我知道两个明显的案例:
A. 您需要转换一个非常大的文档,整个文档无法保存在内存中。B. 你只需要文档的一小部分,而且通常那个“小部分”靠近顶部。然后,您可以通过提前退出来节省时间。
我写信是想问在实践中是否存在第三个真实用例:
C. 您有一个简单的转换并希望放弃构建 XML 树所需的 CPU 时间。举个例子,假设一家商店的货物存储在一个 XML 结构中,格式如下:
顶级 = 年份
第二级 = 月
第 3 级 = 发货日
第 4 级 = 货件 ID
第 5 级 = 装运中的单个物品
只是为了举例,考虑一个转换,其目的是在“月”级别提取信息......只需要存储在月元素属性中的数据,而不需要有关这些节点后代的任何信息。
即使必须阅读整个文档,这种转换是否有可能从流式传输中受益?我希望可以获得一些时间,因为不需要构建树,但在我有限的测试中,情况似乎并非如此。
我在 SAXON 9.5.1.3 中尝试了这样的示例,流式传输比非流式传输示例慢 20%。也许执行流所涉及的开销几乎总是比不构建树所获得的时间更糟?(至少在 SAXON 中,树的构建速度非常快。)
还是我在测试中犯了错误,并且有明显的例子表明流式传输效率更高,即使必须阅读整个文档?