【问题标题】:XML API for best performance获得最佳性能的 XML API
【发布时间】:2011-07-04 14:09:36
【问题描述】:

我有一个可以处理大量 XML 数据的应用程序。所以,我想问你在 java 中处理 XML 的最佳 API 是什么。今天,我正在使用 W3,为了性能,我想迁移到一些 API。 我从 0 开始制作 XML,进行大量转换、导入数据库(mysqlmssql 等)、从数据库导出到 html、修改这些 XML 等等。

JDOM 是最佳选择吗?你知道其他比 JDOM 更好的东西吗? 我(通过阅读页面)听说过 javolution。有人用吗?

你推荐我哪个 API?

【问题讨论】:

  • 每个 API 都有弱点和强项。优势通常是由修复另一个 API 的弱点引起的。您需要哪些优势?

标签: java xml api jdom javolution


【解决方案1】:

如果您有大量数据,主要是避免一次将其全部加载到内存中(因为它会使用大量内存,并且因为它可以防止您重叠 IO 和处理)。遗憾的是,我相信大多数 DOM 和类似 DOM 的库(如 DOM4J)都是这样做的,因此它们不太适合有效地处理大量 XML。

相反,请考虑使用流式 API,例如 SAX 或 StAX。根据我的经验,StAX 通常更易于使用。

还有其他 API 试图为您提供 DOM 的便利性和 SAX 的性能。 Javolution 可能就是其中之一。 VTD-XML 是另一个。但老实说,我发现 StAX 很容易使用 - 它基本上是一个花哨的流,所以你的思维方式就像从流中读取文本文件一样。

您可以尝试的一件事是将 JAXB 与 StAX 结合起来。这个想法是您使用 StAX 流式传输文件,然后使用 JAXB 解组其中的块。例如,如果您正在处理一个Atom 提要,您可以打开它,阅读标题,然后循环工作,一次将entry 元素解组为对象。仅当您的格式由一系列独立元素(如 Atom)组成时,这才真正有效;对于像 XHTML 这样更丰富的东西,它在很大程度上是无用的。您可以在JAXB reference implementationa guy's blog post 中看到这方面的示例。

【讨论】:

    【解决方案2】:

    答案取决于哪些性能方面对您的应用程序很重要。一个因素是您是否正在处理大型 XML 文档。

    对于解析,基于 DOM 的方法不能很好地扩展到大型文档。如果您需要解析大型文档,非 DOM 解析器(例如使用 SAX 和 StAX 的解析器)将更快且资源占用更少。但是,如果您需要在解析后使用 XSL 或 DOM API 转换 XML,则无论如何您都需要将整个文档放在内存中。

    为了从代码创建 XML,StAX 提供了一个很好的 API。由于该方法是基于流的,因此可以很好地扩展以编写非常大的文档。

    【讨论】:

      【解决方案3】:

      好吧,我认识的大多数开发人员和我自己,我们使用dom4J,也许如果你有时间你可以编写一个使用这两个框架的小型性能测试,那么你会看到不同之处。我更喜欢 dom4j。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-05-07
        • 2022-01-20
        • 1970-01-01
        • 1970-01-01
        • 2017-03-24
        • 2022-01-23
        • 2013-09-11
        相关资源
        最近更新 更多