3

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

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

你推荐我哪个 API?

4

3 回答 3

2

如果您有大量数据,主要是避免一次将其全部加载到内存中(因为它将使用大量内存,并且因为它可以防止您重叠 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 参考实现某人的博客文章中看到这方面的示例。

于 2011-07-04T15:15:39.730 回答
1

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

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

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

于 2011-07-04T14:30:28.627 回答
0

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

于 2011-07-04T14:20:05.210 回答