JAXB与DOM和SAX

Hab*_*bin 24 java xml performance jaxb

我一直在使用DOM来解析我的小xml文档.阅读有关JAXB(http://www.oracle.com/technetwork/articles/javase/index-140168.html)的内容,我打算使用JAXB DOM的实例.

如果这是一个正确的方法,请告诉我.

Jes*_*per 66

JAXB与DOM和SAX无法直接比较.Java DOM和SAX解析API是用于解析XML文档的低级API,而JAXB(用于XML绑定的Java API)是用于将XML元素和属性转换为Java对象层次结构的更高级API(反之亦然).JAXB的实现很可能在幕后使用DOM或SAX解析器来实际解析XML输入数据.

通常,您需要将XML文档的内容转换为Java程序中的对象.如果这是你想要做的,那么JAXB可能更容易使用,你需要编写的代码少于使用DOM或SAX解析API时的代码.

它是否适合您的案例取决于您的项目的功能和技术要求.

  • @ErayTuncer不一定,这取决于内部如何实现JAXB.仅仅因为它的更高级别并不意味着它将消耗更多的内存空间. (3认同)

ear*_*cam 6

(约7年为时已晚,但仍然如此)

为了与公认的答案相矛盾,我高度怀疑JAXB是在DOM之上实现的-这将需要两个Object Model(Java和DOM),并且会完全破坏XML绑定的点(JAXB中的XB),从而降低性能/空间。需要两个模型互相支持。

在我看来,当考虑使用Java处理XML双向映射的方法时,JAXB显然是DOM的类似物。DOM和JAXB只是IBM所谓XOM的例子。

在几乎所有情况下,我都喜欢JAXB而不是DOM,并且更喜欢手动滚动而不是SAX-主要是因为我发现SAX和DOM API的“语言不可知论”完全是怪诞的。


显然,如果您的数据集太大而无法放入内存,则对象模型不可行。除此以外

如何选择:

  • 有Java模型,还是正在从XML加载模型?它是序列化的,只需使用JAXB
  • 没有Java模型,时间/空间至关重要,简单的单遍属性/元素查询,模式未知?使用SAX
  • 没有Java模型和时间/空间至关重要,但是模式是已知的,不变且简单的吗?认真介绍一下,这很简单(但是请使用XSD和JAXB和代码生成来测试您的实现)
  • XML架构是先验未知的,可以在不通知的情况下进行更改,还是允许任意未知(命名空间)扩展?使用DOM
  • XML模式是锁定的还是您拥有的?使用JAXB