我需要评估多个XPath(或者可能是XQuery --我可以自由地更改这里的设计)表达式。如果文件很小,我可以很容易地用DOM树逐个计算表达式。如果只有一个表达式,我可以在流模式下计算它。但是,我还没有找到在流模式下有效地计算多个表达式的解决方案,即不进行多次传递。有研究论文。XTREAM看起来很不错,但尽管论文是在2005年写的,但我找不到实现。This甚至更老,但我仍然找不到实现。有没有一个库(最好是Java的,最好是开源的)可以做到这一点?
iqxoj9l91#
例如,使用XSLT3.0流(实际上是Saxon-EE [我公司的产品],因为EXSELT似乎已经停播了),可以使用xsl:fork在一次输入中计算多个流XPath表达式
xsl:fork
<xsl:source-document href="input.xml"> <xsl:fork> <xsl:sequence> <xsl:result-document href="out1.xml"> <out1>{count(//a}</out1> </xsl:result-document> </xsl:sequence> <xsl:sequence> <xsl:result-document href="out2.xml"> <out2>{count(//b}</out1> </xsl:result-document> </xsl:sequence> </xsl:fork> </xsl:source-document>
要在多个源文档上运行此函数,可以使用<xsl:for-each select="collection(....)"/>,而对于Saxon-EE,可以添加saxon:threads="n"以并行处理多个输入。对不起,这不是开源的--这不是你可以在空闲的周末实现的技术。
<xsl:for-each select="collection(....)"/>
saxon:threads="n"
1条答案
按热度按时间iqxoj9l91#
例如,使用XSLT3.0流(实际上是Saxon-EE [我公司的产品],因为EXSELT似乎已经停播了),可以使用
xsl:fork
在一次输入中计算多个流XPath表达式要在多个源文档上运行此函数,可以使用
<xsl:for-each select="collection(....)"/>
,而对于Saxon-EE,可以添加saxon:threads="n"
以并行处理多个输入。对不起,这不是开源的--这不是你可以在空闲的周末实现的技术。