繁体   English   中英

JAXB与DOM和SAX

[英]JAXB vs DOM and SAX

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

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

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时的代码。

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

JAXB代表用于XML绑定的Java体系结构。 JAXB用于编组(Java对象到XML表示)和Unmarshalling(XML内容到Java对象)

请点击此链接以便更好地理解JAXB架构

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

为了与已接受的答案相矛盾,我非常怀疑JAXB是在DOM之上实现的 - 这将需要两个对象模型 (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和codegen来测试你的实现)
  • XML模式是先验未知的,可能会在没有通知的情况下发生变化,或者允许任意未知(命名空间)扩展吗? 使用DOM
  • XML架构是锁定还是您拥有它? 使用JAXB

从较少编写代码的意义上讲,JAXB很容易。 但是如果你需要更多的解析控制,你应该使用SAX解析器。 它使您可以更好地控制解析,并且比DOM解析器更快。 除此之外,JAXB是高级API,因此它有一些开销任务,所以它会比SAX慢一点。

JAXB不支持XPath。 您需要一个模式来生成api。 如果您有未知或潜在的错误XML,您的程序将以验证错误结束。 如果您只想解析不验证,则不适合容错XML处理。 不适合处理未知的XML并在内部寻找已知的节点结构。 复杂的XML Structures中的导航产生了许多糟糕的可读代码。

如果使用JAXB,则在XML结构和Java代码之间实现修复耦合。 如果更改了XML,则必须更改代码并进行部署。 可能会很痛苦。 如果您使用XPath,那么如果XPath处于外部配置,您可以完成解耦XML-structur和java代码。

查看这篇文章什么是JAXB以及我为什么要使用它? 使用JAXB而不是传统的DOM和SAX解析器总是更好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM