9

我正在寻找解决 XSLT 处理问题的方法。

是否可以使用并行处理来加速 XSLT 处理器?还是 XSLT 处理器本质上是串行的?

我的预感是 XML 可以被划分为可以由不同线程处理的块,但是由于我并没有真正找到任何关于这种壮举的文档,所以我对此表示怀疑。是否可以使用 StAX 同时分块 XML?

似乎大多数 XSLT 处理器都是用 Java 或 C/C++ 实现的,但我真的没有目标语言。我只想知道多线程 XSLT 处理器是否可行。

你怎么认为?

4

3 回答 3

6

Saxon: Anatomy of an XSLT Processor,关于 XSLT 处理器的优秀文章,尤其是 saxon。它涵盖了多线程。

顺便说一下,Saxon 可用于 .NET 和 Java,并且是可用的最佳处理器之一。

于 2009-11-11T10:19:27.003 回答
5

像大多数编程语言一样,只要您遵循一些规则,循环本质上就是可并行化的,这被称为数据并行

  • 循环中没有共享状态的突变
  • 循环的一次迭代不能依赖于另一次迭代的结果

任何循环结构都可以很容易地在 XSLT 中并行化。

使用针对突变和依赖项的类似规则,您确实可以在一种基于任务的并行性中并行化大部分 XSLT 转换。

首先,将整个文档分割成任务,在 XSLT 命令和文本节点边界处分割;每个任务都应该根据它在文档中的位置(从上到下)分配一个顺序索引。

接下来,将任务分散到不同的 XSLT 处理函数,每个函数在不同的线程上运行;这些处理器都需要使用相同的全局状态(变量、常量等)进行初始化。

最后,一旦所有转换完成,控制线程应按索引顺序收集结果(转换后的字符串)并将它们组装到完成的文档中。

于 2009-11-11T08:17:30.317 回答
5

对于因搜索而点击此线程的人来说,这是一个迟到的答案。在提出这个问题时,XSLT 中的多线程在理论上是一种可能性,但实际上并未在任何生产 XSLT 处理器中实现。今天,多线程在 Saxon-EE 中“开箱即用”可用。一篇描述其工作原理的论文发表在 2015 年 XML 布拉格:参见http://www.saxonica.com/papers/xmlprague-2015mhk.pdf

于 2017-04-24T09:29:23.657 回答