2

我需要使用 xml 拉解析器。我可以找到 stax-api.jar,它似乎已经是 com.sun.xml.* 的一部分,而且似乎已经实现了一些与 stax 相关的东西。

com.sun.xml 不幸的是在 JDK 6 中没有源代码,所以我不知道。

还有xmlpullstax.codehaus.orgapache axiom,它们实现了 stax-api。stax.codehaus.org 似乎是一个 stax 参考实现。Xmlpull 似乎是由与参考实现相同的人完成的,而 Apache Axiom 似乎是为 Apache Axis2 创建的基于 StAX 的解析器。

您能否澄清一下主要区别是什么,使用什么 API 以及何时使用这些实现之一以及为什么?

编辑:在你决定结束这个问题之前,请注意 xmlpull.org 和 stax.codehaus.org 版本已经很老了(5 年),而且真的不能说 stax 解析器实现是否是 sun.com.xml 的一部分。 *。我只需要有拉解析器经验的人告诉我,使用什么以及为什么。

例如,Apache Abdera项目(我也在解析 atom 提要)正在使用 Axiom 实现,该实现似乎正在实现其 Axiom-api 和 geronimo-stax-api_1.0_spec

4

2 回答 2

3

除了指出 JDK/JRE 捆绑了 Sun 的 SJSXP 在这一点上可以正常工作,我建议反对使用 Stax ref impl (stax.codehaus.org)——永远不要将它用于任何事情。它有很多剩余的错误(虽然很多已经修复,初始版本很糟糕),速度不是特别快,甚至没有实现所有强制性功能。远离它。

我偏爱 Woodstox,它是迄今为止最完整的 XML 特性实现(与 Xerces 相当,是唯一可以这么说的其他 Java XML 解析器),比 Sjsxp 性能更高,并且围绕着可靠的解析器和生成器——这就是大多数现代 Java XML Web 服务框架和容器捆绑 Woodstox 的原因。

或者,如果您想要超高性能,请查看Aalto。它是 Woodstox 的继任者,功能更少(没有 DTD 处理),但在许多常见情况下速度提高了 2 倍。如果您需要非阻塞/异步解析(例如基于 NIO 的输入),Aalto 是唯一提供该功能的已知 Java XML 解析器。

至于 Axiom:它不是解析器,而是建立在像 Woodstox 这样的 Stax 解析器之上的树模型,所以他们没有重新发明轮子。XmlPull 比 Stax API 早了几年;基本上,Stax 标准化源于人们使用 XmlPull,喜欢他们所看到的,而 Sun+BEA 希望标准化该方法。在这个过程中发生了一些摩擦,所以最终 XmlPull 并没有在 Stax 完成时停止,但可以将 Stax 视为继任者——XmlPull 仍然用于移动设备;我认为Android平台包括它。

(免责声明:我参与了 Aalto 和 Woodstox 项目;并为 SJSXP 和 Stax RI 提供了十几个错误修复)

于 2011-10-15T17:37:24.883 回答
1

从 Java 1.6 开始,在普通捆绑的 JRE 中有一个 StaX 实现。你可以用那个。如果您不喜欢表演,请加入woodstox。

Axiom 完全是另外一回事,要复杂得多。Xmlpull 似乎在支持一个或另一个 Stax 实现。

于 2011-10-07T19:32:34.643 回答