适用于 Java 的最佳 XML 解析器 [已关闭]

2022-08-31 04:39:10

我需要读取小的(最多几MB,UTF-8编码的)XML文件,四处翻找各种元素和属性,也许修改一些并将XML再次写回磁盘(最好是使用漂亮的缩进格式)。

哪种 XML 解析器最适合我的需求?有很多可供选择。我所知道的一些是:

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

建议?


答案 1

我认为你不应该考虑任何特定的解析器实现。用于 XML 处理的 Java API 允许您以标准方式使用任何符合要求的解析器实现。代码应该更具可移植性,当您意识到特定的解析器已经变得太旧时,您可以将其替换为另一个解析器,而无需更改代码的一行(如果您操作正确)。

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

  • 萨克斯管这是最简单的 API。通过定义一个 Handler 类来读取 XML,该类在以串行方式处理 XML 时接收元素/属性内的数据。如果您只计划读取某些属性/元素和/或写回一些值(您的情况),则更快,更简单。
  • 多姆此方法创建一个对象树,允许您随机修改/访问它,因此它更适合复杂的 XML 操作和处理。
  • 断续器它位于 SAX 和 DOM 之间的路径中间。您只需编写代码,以便在处理数据时从您感兴趣的解析器中提取数据。

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

没有必要说所有(我还没有全部检查,但我几乎可以肯定)建议的解析器都符合JAXP实现,因此从技术上讲,您可以使用所有解析器,无论哪种。


答案 2

以下是对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

接口类型拉取、流式推送、流式处理 内存树 XSLT 规则

易用性高 中 高 中

XPath 功能否 否 是

CPU 和内存好好 好 不定

仅转发是 是 否

读取 XML是 是 是 是

编写 XML是 否 是

克鲁德否 否


推荐