JAXP和JAXB有什么区别?


Answers:


69

JAXP(用于XML处理的Java API)是一个过时的总称,涵盖了JavaSE中的各种低级XML API,例如DOM,SAX和StAX。

JAXB(用于XML绑定的Java体系结构)是一种特定的API(位于下方的东西javax.xml.bind),它使用批注将XML文档绑定到Java对象模型。


1
除了解析(DOM,SAX等)之外,我相信JAXP还包括用于执行诸如评估XPath,执行XSLT转换以及根据模式验证XML之类的任务的API。我记得使用javax.xml.validation类来针对我的服务的XSD验证传入的请求,以帮助客户自己解决问题。
spaaarky21年

49

JAXP是用于XML处理的Java API,它为我们提供了一个使用DOM或SAX解析器解析XML文件的平台。

由于JAXB是XML绑定的Java体系结构,因此可以更轻松地从以Java编程语言编写的应用程序访问XML文档。

例如:Computer.xml文件,如果要使用JAXP访问数据,将执行以下步骤

  1. 创建一个SAX解析器或DOM解析器,然后对数据进行批处理,如果我们使用DOM,则如果文档太大,可能会占用大量内存。假设如果使用SAX解析器,则需要标识文档的开头。当它遇到重要的事件(用SAX术语来说是“事件”),例如XML标记的开始或标记内的文本时,它将使该数据可供调用应用程序使用。
  2. 然后创建一个内容处理程序,该处理程序定义解析器在遇到事件时要通知的方法。这些方法称为回调方法,对收到的数据采取适当的操作。

如果由JAXB执行相同的操作,则需要执行以下步骤来访问Computer.xml

  1. 绑定XML文档的架构。
  2. 将文档解组为Java内容对象。Java内容对象代表XML文档的内容和组织,可直接用于您的程序。解组后,您的程序只需访问Java内容对象中的数据然后显示它,就可以访问和显示XML文档中的数据。无需创建和使用解析器,也无需使用回调方法编写内容处理程序。这意味着开发人员可以访问和处理XML数据,而不必了解XML或XML处理

DOM将XML文件视为对象,而SAX将单个项作为事件处理,这更有效吗?
Malwaregeek 2013年

5
@Malwaregeek:视情况而定,如果按顺序访问整个XML,则SAX是首选,因为它占用的内存更少。如果要随机访问XML中的中间元素,则DOM是首选,但是它需要更多的内存。这种平衡类似于每个程序中的内存Vs时空平衡
Rengasami Ramanujam

1

关键区别在于xml模式扮演的角色。JAXP在不了解XML Schema的情况下已经过时,而JAXB则将模式绑定作为第一步。


JAXP(JSR 206)教程在“实施SAX验证”部分中,提供了专用于“使用XML架构进行验证”的部分。该规范还提到了Schema类作为JAXP API的一部分。(在将其包含在OpenJDK 7中之后,已作为独立项目撤回,请参阅JAXP 1.6的规范PDF中的11.5节。)
Olivier Cailloux
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.