JAXB vs DOM 和 SAX

2022-09-01 14:54:43

一段时间以来,我一直在使用DOM来解析我的小xml文档。在阅读有关JAXB(http://www.oracle.com/technetwork/articles/javase/index-140168.html)之后,我计划使用DOM的JAXB。

请让我知道这是否是正确的方法。


答案 1

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 时少。

它是否适合您的情况取决于项目的功能和技术要求。


答案 2

(约7年太晚了,但仍然)

为了与公认的答案相矛盾,我非常怀疑JAXB是在DOM之上实现的 - 这将需要两个对象模型(Java和DOM),并且会完全击败XML绑定(JAXB中的XB)的点,在性能/空间方面更糟,它需要两个模型相互支持。

在我看来,JAXB 在考虑在 Java 中处理 XML 双向映射的方法时,显然是 DOM 的类似物。DOM和JAXB只是IBM称之为XOM的案例。

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


显然,如果你的数据集太大而无法放入内存,那么对象模型就不可行。否则

如何选择:

  • 有一个Java模型,还是从XML加载一个?它是序列化的,只需使用JAXB
  • 没有Java模型,时间/空间至上,简单的单通道属性/元素查询,模式未知?使用 SAX
  • 没有Java模型和时间/空间至关重要,但模式是已知的,不变的和简单的?滚动你自己的,说真的这是微不足道的(但是一定要使用XSD,JAXB和codegen来测试你的实现)
  • XML 架构是先验的、可能会在没有通知的情况下进行更改,还是允许任意未知(命名空间)扩展?使用 DOM
  • XML 架构是锁定的还是您拥有的?使用 JAXB

推荐