使用哪种Java XML解析器?

时间:2012-06-15 15:01:44

标签: java xml jaxb xml-parsing

我从这个link发现Java中有几种类型的XML解析器。你能帮我选择哪一个会消耗更少的内存并且工作得更快:

DOM XML Parser
SAX XML Parser
JDOM XML Parser
JAXB

我想用C客户端创建Java服务器应用程序,它使用XML通过网络进行通信。 如果我选择使用JAXB,我可以轻松地将其与libxml集成吗?如果我使用JAXB和libxml在应用程序之间传输数据,可能会出现哪些问题?

3 个答案:

答案 0 :(得分:2)

这些是更多的解析技术,而不是实际的解析工具。 Xerces是解析工具的一个示例。

SAX有助于提高速度和解析事件处理。从事件中解析可以轻松地让您跳过不感兴趣的事件,并且跳过的惩罚很低。在读取整个文档时,无需存储它,因此SAX可以处理大于系统内存的文档。

DOM可以将整个文档保存在内存中。这样做很容易让你工作需要文档的所有元素(交叉引用等)。这种便利是有代价的,与SAX不同,您必须有足够的内存来存放整个文档。

JDOM基本上是DOM,但具有不同的编程接口。它假设它的编程接口更符合Java,无论这意味着什么。

JAXP是一套XML处理工具,它以可插入的方式包含SAX和DOM接口,可以轻松地交换后端实现。

JAXB是一套XML处理工具,可以方便地将XML映射到常规Java对象,并从常规Java对象生成XML。

就个人而言,我喜欢SAX,但是为了使用SAX进行有效的解析,你应该使用一个堆栈和上下文敏感的解析器块,这些块被推入堆栈并弹出它,从而构建XML映射到的对象。我们的想法是,您将文档中的位置保持为StringBuffer,然后推入处理程序来处理输入元素,然后处理所有事件,直到它检测到正确的退出事件。然后上面的处理程序从弹出的子处理程序中读取对象。这样的技术需要一些工作,但是可以将SAX的速度与DOM的便利性结合起来,产生您自己的对象树(而不是“节点”树)。

答案 1 :(得分:1)

如果你想减少使用内存,我会选择SAX。它是一个基于事件的解析实用程序。整个XML文件不会像DOM对象一样加载到内存中。您可以在内存中保存要保存的内容。关于SAX的另一个好处是你只控制你想要的事件,这可以真正提高解析的速度。

答案 2 :(得分:1)

DOM将使用更多内存 - 您将需要在内存中创建整个xml DOM模型。因此,SAX或STAX将允许解析您需要的内容并保存内存。

JAXB允许您自动从bean映射到xml并反向。