java 如何在流模式下高效地处理多个XPath或XQuery表达式

nr9pn0ug  于 2022-11-27  发布在  Java
关注(0)|答案(1)|浏览(85)

我需要评估多个XPath(或者可能是XQuery --我可以自由地更改这里的设计)表达式。如果文件很小,我可以很容易地用DOM树逐个计算表达式。如果只有一个表达式,我可以在流模式下计算它。但是,我还没有找到在流模式下有效地计算多个表达式的解决方案,即不进行多次传递。
有研究论文。XTREAM看起来很不错,但尽管论文是在2005年写的,但我找不到实现。This甚至更老,但我仍然找不到实现。
有没有一个库(最好是Java的,最好是开源的)可以做到这一点?

iqxoj9l9

iqxoj9l91#

例如,使用XSLT3.0流(实际上是Saxon-EE [我公司的产品],因为EXSELT似乎已经停播了),可以使用xsl:fork在一次输入中计算多个流XPath表达式

<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"以并行处理多个输入。
对不起,这不是开源的--这不是你可以在空闲的周末实现的技术。

相关问题