适用于Java的最佳XML解析器

时间:2008-12-17 06:52:16

标签: java xml parsing

我需要阅读较小的(最多几个MB,UTF-8编码的)XML文件,浏览各种元素和属性,或许修改一些并将XML再次写回磁盘(最好是很好的,缩进格式)。

根据我的需求,最好的XML解析器是什么?有很多可供选择。我知道的有些是:

当然是JDK中的那个(我使用的是Java 6)。我对Xerces很熟悉,但发现它很笨重。

建议?

8 个答案:

答案 0 :(得分:250)

我认为你不应该考虑任何特定的解析器实现。 Java API for XML Processing允许您以标准方式使用任何符合标准的解析器实现。代码应该更加可移植,并且当您意识到特定解析器已经变得太旧时,您可以在不更改代码行的情况下将其替换为另一行(如果您正确执行)。

基本上有三种以标准方式处理XML的方法:

  • SAX这是最简单的API。您通过定义Handler类来读取XML,该类在以串行方式处理XML时接收元素/属性内的数据。如果你只打算阅读一些属性/元素和/或写一些值(你的情况),它会更快更简单。
  • DOM此方法创建一个对象树,允许您随机修改/访问它,以便更好地进行复杂的XML操作和处理。
  • StAX这是在SAX和DOM之间的路径中间。您只需编写代码即可在处理数据时从您感兴趣的解析器中提取数据。

忘记专有API,例如JDOM或Apache专用API(即Apache Xerces XMLSerializer)因为会将您绑定到可能及时发展或失去向后兼容性的特定实现,这将使您在将来更改代码时您想要升级到新版本的JDOM或您使用的任何解析器。如果您坚持使用Java标准API(使用工厂和接口),您的代码将更加模块化和可维护。

没有必要说所有(我没有检查所有,但我几乎可以肯定)解析器建议符合JAXP实现,所以从技术上讲,你可以使用all,无论哪个。

答案 1 :(得分:127)

这是一个关于DOM,SAX,StAX& amp;的完美比较。 TrAX的 (来源:http://download.oracle.com/docs/cd/E17802_01/webservices/webservices/docs/1.6/tutorial/doc/SJSXP2.html

  

功能StAX SAX DOM TrAX

API类型拉,流式推送,流式传输内存树XSLT规则

易于使用高中高中

XPath功能否否是是

CPU&记忆好的好变化

仅向前是是否否

阅读XML 是是是是

写XML 是否是是

CRUD 否否是否

答案 2 :(得分:80)

如果速度和内存没问题, dom4j 是一个非常好的选择。如果您需要速度,使用像 Woodstox 这样的StAX解析器是正确的方法,但是您必须编写更多代码来完成工作,并且您必须习惯于在流中处理XML。

答案 3 :(得分:8)

简单XML http://simple.sourceforge.net/非常容易(反)序列化对象。

答案 4 :(得分:4)

除了SAX和DOM之外,还有使用XMLStreamReader的STaX解析,这是一个xml pull解析器。

答案 5 :(得分:3)

我发现dom4j是使用XML的工具。特别是与Xerces相比。

答案 6 :(得分:2)

我不建议你在应用程序中有很多“思考”,但使用XSLT可能比Java操作更好(并且可能更快地使用XSLT到字节码编译)。

答案 7 :(得分:1)

如果你不太关心性能,我是Apache Digester的忠实粉丝,因为它本质上允许你直接从XML映射到Java Bean。

否则,您必须首先解析,然后构造您的对象。