JAXP 和 JAXB 有啥区别?
Posted
技术标签:
【中文标题】JAXP 和 JAXB 有啥区别?【英文标题】:What is the difference between JAXP and JAXB?JAXP 和 JAXB 有什么区别? 【发布时间】:2011-02-17 14:14:28 【问题描述】:JAXP 和 JAXB 有什么区别?
【问题讨论】:
仅供参考,请参阅 Oracle 教程 for JAXP 和 for JAXB。 【参考方案1】:JAXP(用于 XML 处理的 Java API)是一个相当过时的总称,涵盖了 JavaSE 中的各种低级 XML API,例如 DOM、SAX 和 StAX。
JAXB(Java Architecture for XML Binding)是一个特定的 API(javax.xml.bind
下的东西),它使用注解将 XML 文档绑定到 java 对象模型。
【讨论】:
除了解析(DOM、SAX 等)之外,我相信 JAXP 还包括用于评估 XPath、执行 XSLT 转换和根据模式验证 XML 等任务的 API。我记得使用javax.xml.validation
类来验证传入请求是否针对我的服务的 XSD,以帮助客户自己解决问题。【参考方案2】:
JAXP 是用于 XML 处理的 Java API,它为我们提供了一个使用 DOM 或 SAX 解析器解析 XML 文件的平台。
JAXB 是用于 XML 绑定的 Java 体系结构,它可以更轻松地从用 Java 编程语言编写的应用程序访问 XML 文档。
例如:Computer.xml 文件,如果我们想用 JAXP 访问数据,我们将执行以下步骤
-
创建一个 SAX 解析器或 DOM 解析器,然后解析数据,如果我们使用
DOM,如果文档太大,可能会占用大量内存。认为
如果我们使用 SAX 解析器,我们需要识别
文档。当它遇到重要的事情时(在 SAX 术语中,
“事件”),例如 XML 标记的开始,或内部的文本
标签,它使调用应用程序可以使用该数据。
然后创建一个内容处理程序,定义要使用的方法
解析器在遇到事件时通知它。这些方法,
称为回调方法,对数据采取适当的行动
他们收到。
如果是由JAXB执行的相同操作,需要执行以下步骤才能访问Computer.xml
-
为 XML 文档绑定架构。
将文档解组为 Java 内容对象。 Java 内容对象代表 XML 文档的内容和组织,并且可以直接用于您的程序。
解组后,您的程序可以访问和显示 XML 文档中的数据,只需访问 Java 内容对象中的数据,然后显示它。无需创建和使用解析器,也无需编写带有回调方法的内容处理程序。这意味着开发人员无需了解 XML 或 XML 处理即可访问和处理 XML 数据
【讨论】:
DOM 将 XML 文件视为对象,而 SAX 将单个项目视为事件,这样效率更高? @Malwaregeek :视情况而定,如果您按顺序访问整个 XML,SAX 更可取,因为它占用的内存更少。如果您希望随机访问 XML 中的中间元素,则 DOM 更可取,但它需要更多内存。这种平衡类似于每个程序中的内存与时空平衡【参考方案3】:主要区别在于 xml Schema 所扮演的角色。 JAXP 已经过时,不知道 XML 模式,而 JAXB 将模式绑定作为第一步处理。
【讨论】:
JAXP (JSR 206) 教程的“Implementing SAX Validation” 部分提供了一个专门用于“使用 XML 模式进行验证”的部分。该规范还提到 Schema 类作为 JAXP API 的一部分。 (在包含在 OpenJDK 7 中后,它已作为独立项目撤回,请参阅 JAXP 1.6 规范 PDF 中的第 11.5 节。)以上是关于JAXP 和 JAXB 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
在 Java 中直接使用 JAXP 而不是 DOM/SAX 有啥好处?
Flutter 中 required 和 @required 有啥区别。它们之间有啥区别,我们啥时候需要使用它们?