Java的最佳XMLparsing器

我需要阅读小文件(最多几MB,UTF-8编码的)XML文件,翻看各种元素和属性,或许修改一些,然后再将XML写回到磁盘(最好使用漂亮的缩进格式) 。

什么是最适合我需求的XMLparsing器? 有很多select。 有些我知道的是:

  • JDOM
  • Woodstox
  • XOM
  • DOM4J
  • VTD-XML
  • 的Xerces-J
  • 赤红

当然也是JDK中的一个(我正在使用Java 6)。 我熟悉Xerces,但发现它笨重。

build议?

如果速度和内存没有问题, dom4j是一个非常好的select。 如果你需要速度,使用像Woodstox这样的StAXparsing器是正确的方法,但是你必须编写更多的代码才能完成工作,而且你必须习惯在stream中处理XML。

我认为你不应该考虑任何具体的parsing器实现。 用于XML处理的Java API允许您以标准方式使用任何符合parsing器的实现。 代码应该更便于携带,当你意识到一个特定的parsing器已经变得太旧时,你可以用另一个replace它而不用改变你的代码行(如果你正确地做的话)。

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

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

忘记诸如JDOM或Apache之类的专有API(例如Apache Xerces XMLSerializer ),因为它会将您与特定的实现联系起来,这些实现可能会及时演化或失去向后兼容性,这将使您在将来要升级时更改代码一个新版本的JDOM或者你使用的任何分析器。 如果你坚持使用Java标准API(使用工厂和接口),你的代码将更加模块化和可维护。

没有必要说提出的parsing器的所有(我没有全部检查,但我几乎可以肯定)符合JAXP实现,所以在技术上可以使用全部,无论哪一个。

这是一个很好的比较DOM,SAX,StAX和TrAX(来源: http : //download.oracle.com/docs/cd/E17802_01/webservices/webservices/docs/1.6/tutorial/doc/SJSXP2.html )

functionStAX SAX DOM TrAX

APItypes拉,stream推,stream在内存树XSLT规则

易用性高中高

XPathfunction否否是是

CPU和内存良好的变化有所不同

只转发是是否否

读取XML是是是是

写入XML是否是是

CRUD否否是否

除了SAX和DOM之外,还有使用XMLStreamReader(它是一个xml pullparsing器)的STaXparsing。

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

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

如果你不在乎性能,我是Apache Digester的忠实粉丝,因为它本质上可以让你直接从XML映射到Java Beans。

否则,你必须先parsing,然后构造你的对象。