是否可以将事件源与StAX XML事件序列一起使用

我有一个要解决的XML性能问题。

具体来说,我有相同的中小型XML文件,该文件已被解析了数百次。

该功能绑定到StAX XML事件阅读器。无法克隆或复制其输出,重现所需功能的唯一方法是再次在XML文档上运行此XML事件读取器。

为了提高性能,我想将XML急切地读入StAX事件序列中,然后重播该事件序列,而不是每次都重新解析XML。

我认为问题在于实现:尽管这种想法在原则上是合理的,但是“事件”表示为针对具有大型API界面的XMLStreamReader的状态更改,而XMLStreamReader的大部分(但并非全部)与其“当前”事件。

这样的系统已经存在吗?

如果我必须自己构建它,那么确保正确性的最佳方法是什么?

xiwangvsqiji 回答:是否可以将事件源与StAX XML事件序列一起使用

在内存中表示XML文档以避免重复解析的通常方法是使用许多树模型之一(我认为JDOM2和XOM是最好的树模型,尽管许多人仍然使用可怕的旧DOM模型。仅仅是因为它包装在JDK中)。所以我想我在问为什么这种“显而易见”的方法对您不起作用?

在某些情况下(在Saxon内部),我改用可重播的事件流,仅是因为存储事件然后重播它们比构建一棵树然后走一棵树效率更高。为此,我不使用StaX事件,而是使用自己的类net.sf.saxon.event.EventBuffer,其中包含net.sf.saxon.event.Event对象的列表。也许此事件模型为此目的进行了更好的设计,比StAX模型要简单得多。 Saxon没有任何逻辑来读取EventBuffer作为StAX事件流,但是添加起来很容易。它是开放源代码,因此请查看是否可以适应它。

本文链接:https://www.f2er.com/3140788.html

大家都在问