Java的最佳XML解析器?

  • 回答 (2)
  • 关注 (0)
  • 查看 (89)

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

什么是最适合我需求的XML解析器?有很多选择。有些我知道的是:

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

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

有什么建议吗?

最爱开车啦最爱开车啦提问于
最爱开车啦互联网的敏感者回答于

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

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

  • SAX这是最简单的API。您通过定义一个Handler类来读取XML,这个Handler类在XML以串行方式处理时接收元素/属性中的数据。如果你只打算读取一些属性/元素和/或写回一些值(你的情况),它会更快更简单。
  • DOM此方法创建一个对象树,使您可以随意修改/访问它,因此对于复杂的XML操作和处理更好。
  • StAX这是SAX和DOM之间的路径的中间。您只需编写代码来从处理时感兴趣的解析器中提取数据。
  • 忘记诸如JDOM或Apache之类的专有API(例如Apache Xerces XMLSerializer),因为它会将您与特定的实现联系起来,这些实现可以及时发展或失去向后兼容性,这将使您在将来要升级时更改代码一个新版本的JDOM或者你使用的任何分析器。如果你坚持使用Java标准API(使用工厂和接口),你的代码将更加模块化和可维护。

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

Dust资深服务器虚拟化工程师。回答于

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

扫码关注云+社区

领取腾讯云代金券