【发布时间】:2011-12-04 07:50:41
【问题描述】:
一段时间以来,我一直在使用 DOM 来解析我的小型 xml 文档。在阅读了有关 JAXB (http://www.oracle.com/technetwork/articles/javase/index-140168.html) 的信息后,我打算使用 JAXB 代替 DOM。
请让我知道这是否是正确的方法。
【问题讨论】:
标签: java xml performance jaxb
一段时间以来,我一直在使用 DOM 来解析我的小型 xml 文档。在阅读了有关 JAXB (http://www.oracle.com/technetwork/articles/javase/index-140168.html) 的信息后,我打算使用 JAXB 代替 DOM。
请让我知道这是否是正确的方法。
【问题讨论】:
标签: java xml performance jaxb
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 时相比,您需要编写的代码更少。
这是否适合您的案例取决于您的项目的功能和技术要求。
【讨论】:
(约晚了 7 年,但仍然如此)
为了与公认的答案相矛盾,我非常怀疑 JAXB 是在 DOM 之上实现的——这将需要两个 Object Models(Java 和 DOM)并且会完全违背 XML binding 的观点(XB 在 JAXB 中)对于性能/空间来说更糟,它需要两个模型相互支持。
在考虑在 Java 中处理 XML 双向映射的方法时,在我看来,JAXB 显然是 DOM 的类似物。 DOM 和 JAXB 只是 IBM 称之为 XOM 的例子。
在几乎所有情况下,我都更喜欢 JAXB 而不是 DOM,更喜欢 handrolled 而不是 SAX - 主要是因为我发现 SAX 和 DOM API 的“语言不可知论”完全是怪诞的。
显然,如果您的数据集太大而无法放入内存,那么 对象模型 是不可行的。否则
【讨论】:
JAXB,代表用于 XML 绑定的 Java 架构。 JAXB 用于编组(Java 对象到 XML 表示)和解组(XML 内容到 Java 对象)
请点击此链接以更好地了解JAXB Architecture
【讨论】:
JAXB 从代码编写较少的意义上来说会很容易。但是,如果您需要对解析进行更多控制,您应该使用 SAX parser 。它使您可以更好地控制解析,并且比 DOM 解析器更快。除此之外,JAXB 是高级 API,所以它有一些开销任务,所以它会比 SAX 慢一些。
【讨论】:
JAXB 不支持 XPath。您需要一个模式来生成 api。如果您有未知或潜在的错误 XML,您的程序会以验证错误结束。如果您只想解析而不是验证,则不适合容错 XML 处理。不适合处理未知的 XML 和在内部寻找已知的节点结构。复杂的 XML 结构中的导航会产生很多可读性差的代码。
如果您使用 JAXB,您将在 XML 结构和您的 java 代码之间实现修复耦合。如果 XML 发生更改,您必须更改代码并进行部署。可能会很痛苦。如果你使用 XPath,你可以完成 XML-structur 和 java 代码的解耦,如果 XPath 在外部配置中。
【讨论】:
查看此帖子What is JAXB and why would I use it? 与传统的 DOM 和 SAX 解析器相比,使用 JAXB 总是更好。
【讨论】: