java+xslt+3.0,什么是最高效的基于Java的流XSLT处理器?

本文介绍了XSLT和XQuery中的流处理技术,特别是突发模式流传输和流模板方法。突发模式适用于处理大量独立记录,如日志文件,而流模板则遵循递归下降处理模式,但一次只处理一个元素,不构建完整的内存树。xsl:iterate指令在XSLT3.0中提供了更高效的数据处理,允许维护工作数据和提早退出循环。然而,目前的Saxon实现中,流处理仍存在一些限制,如分组功能尚未实现。
摘要由CSDN通过智能技术生成

在撒克逊人流中基本上有两种方法:

突发模式流传输:通过这种方法,将大文件的转换分解为文件小片段的转换序列。依次从输入中读取每个片段,将其变成内存中的一棵小树,进行转换,然后写入输出文件。

此方法适用于结构相当平坦的文件,例如包含数百万条日志记录的日志文件,其中每个日志记录的处理均独立于之前的记录。

此技术的一种变体使用新的XSLT 3.0 xsl:iterate指令代替xsl:for-

each遍历记录。这样可以在处理记录时维护工作数据:例如,可以在运行结束时输出总计或平均值,或者根据文件中记录的内容来处理一条记录。

。xsl:iterate指令还允许提早退出循环,这使得转换可以从大文件的开头处理数据,而无需实际读取整个文件。

XSLT和XQuery均提供突发模式流传输,但是XQuery中没有与xsl:iterate构造等效的流。

流模板:这种方法遵循传统的XSLT处理模式,该模式通过将模板规则与每个级别的节点匹配来执行输入XML层次结构的递归下降,但是一次这样做一个元素,而无需在内存中构建树。

每个模板都属于一个模式(也许是默认的未命名模式),流式传输是该模式的属性,可以使用新的xsl:mode声明来指定。如果该模式被声明为可流式处理,则该模式下的每个模板规则都必须遵守可流式处理规则。

流处理中允许的规则非常复杂,但是基本原理是给定节点的模板规则只能按顺序读取该节点的后代一次。当前Saxon实现中的限制还带来了其他规则:例如,尽管分组使用从理论上讲与流式实现是一致的,但当前在Saxon中尚未实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值