什么拉解析器实现使用什么时候?

时间:2011-10-07 18:55:37

标签: java xml xmlpullparser

我需要使用xml pull解析器。我可以找到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项目(我正在解析原子提要)正在使用Axiom实现,它似乎正在实现其Axiom-api以及geronimo-stax-api_1.0_spec

2 个答案:

答案 0 :(得分: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希望标准化该方法。在这个过程中有一些摩擦,所以最后在Stax最终确定时XmlPull没有停止,但是人们可以认为Stax是继承者 - XmlPull仍然用于移动设备;我认为Android平台包含它。

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

答案 1 :(得分:1)

从Java 1.6开始,普通捆绑的JRE中有一个StaX实现。你可以用它。如果你不喜欢表演,可以选择woodstox。

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