Java 实现最佳性能的XML API

Java 实现最佳性能的XML API,java,xml,api,jdom,javolution,Java,Xml,Api,Jdom,Javolution,我有一个处理大量XML数据的应用程序。所以,我想问一下,在java中处理XML的最佳API是什么。今天,我正在使用W3,为了提高性能,我想迁移到一些API。 我从0生成XML,进行大量转换,导入数据库(mysql,mssql,等等),从数据库导出到html,修改这些XML,等等 JDOM是最好的选择吗?你知道一些比JDOM更好的吗? 我(通过阅读页数)听说了关于javolution的事。有人用吗 您推荐我使用哪种API?好吧,我所认识的大多数开发人员和我自己都在使用,如果您有时间可以使用这两种框

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

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


您推荐我使用哪种API?

好吧,我所认识的大多数开发人员和我自己都在使用,如果您有时间可以使用这两种框架编写一个小型performancetest,那么您将看到不同之处。我更喜欢dom4j。

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

对于解析,基于DOM的方法无法很好地扩展到大型文档。如果需要解析大型文档,非DOM解析器(如使用SAX和StAX的解析器)将更快,资源密集度更低。但是,如果您需要在解析后使用XSL或DOM API转换XML,那么在任何情况下都需要将整个文档存储在内存中


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

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

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

还有其他API试图通过SAX的性能为您提供DOM的便利。解决方案可能是其中之一;这是另一个。但是说实话,我发现StAX很容易使用——它基本上是一个奇特的流,所以你只需要用与从流中读取文本文件相同的方式来思考


您可以尝试将JAXB与StAX相结合。其思想是使用StAX对文件进行流式处理,然后使用JAXB对其中的块进行解组。例如,如果您正在处理一个提要,您可以打开它,读取标题,然后在循环中将
entry
元素逐个解组到对象。只有当格式由一系列独立元素组成时,如Atom,这才真正起作用;在XHTML这样更丰富的东西上,它基本上是无用的。您可以在和中看到这方面的示例。

每个API都有各自的优缺点。这些优点通常是由于修复了另一个API的缺点造成的。你需要哪些优势?