适用于Java的最佳XML解析器

Eva*_*van 383 java xml parsing

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

什么是最符合我需求的XML解析器?有很多可供选择.我知道的有些是:

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

建议?

Fer*_*lez 253

我认为你不应该考虑任何特定的解析器实现.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实现,所以从技术上讲,你可以使用所有,无论哪个.

  • 实际上,有3种方式:StAX(javax.xml.stream)是第三种标准方式. (11认同)

小智 130

这是关于DOM,SAX,StAX和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                      否否是否

  • 您可以使用SAX编写XML.接收器提供了一个处理程序实现,用户可以在其上调用SAX事件来生成XML输出.(我看到表格来源而不是原始材料,但表格却错了) (7认同)

zeh*_*rer 80

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

  • dom4j非常好,但绝对不是没有问题.有关dom4j的替代方案,请参阅http://stackoverflow.com/questions/831865/what-java-xml-library-do-you-recommend-to-replace-dom4j (6认同)

小智 8

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