admin 管理员组文章数量: 1086019
2024年4月20日发(作者:结构体的形式)
Java 技术和 XML 无疑是最近五年来最重要的编程开发工具。因此,用于在 Java
语言中处理 XML 的 API 就发展起来了。两个最流行的 —— 文档对象模型
(DOM) 和 Simple API for XML (SAX) —— 已经产生巨大的影响,JDOM 和数据
绑定 API 也随之产生了(参阅 参考资料)。彻底理解其中一个或两个 API 是
非常必要的;正确使用全部 API 会让您成为权威。但是,越来越多的 Java 开
发人员发现他们不再需要广泛了解 SAX 和 DOM —— 这主要是由于 Sun
Microsystems 的 JAXP 工具包。Java API for XML Processing (JAXP) 使得 XML
甚至对于 Java 初级开发人员也变得易于掌握,并大大提高了高级开发人员的能
力。也就是说,即使使用 JAXP 的高级开发人员对于他们十分依赖的 API 也有
误解。
本文假设您已基本了解 SAX 和 DOM。如果您完全不懂 XML 解析,那么可能需要
首先阅读在线参考资料中有关 SAX 和 DOM 的信息,或者浏览我的书(参阅 参
考资料)。您不需要精通回调或 DOM Node,但必须至少了解是 SAX 和 DOM 在
解析 API。本文还有助于基本了解它们之间的差别。如果您掌握了这些基本知识,
本文将对您更有帮助。
JAXP:是 API 还是抽象?
严格说来,JAXP 是 API,但更准确地说是抽象层。它没有提供解析 XML 的新方
法,没有添加到 SAX 或 DOM,也没有为 Java 和 XML 处理提供新功能。(如果
您还不相信这一点,那么阅读这篇文章算对了。)但是,JAXP 使得使用 DOM 和
SAX 来处理一些困难任务变得更容易。它还允许以开发商中立的方式处理一些在
使用 DOM 和 SAX API 时可能遇到的特定于开发商的任务。
逐渐晋级
在 Java 平台的早期版本中,JAXP 是核心平台中单独的下载。在 Java 5.0 中,
JAXP 已经是 Java 语言的主要产品。如果已经有最新版本的 JDK(参阅 参考资
料),您就已经获得了 JAXP。
没有 SAX、DOM 或另一个 XML 解析 API,
则无法解析 XML
。我曾经看到过许多
关于将 SAX、DOM、JDOM 和 dom4j 与 JAXP 进行比较的请求,但作这样的比较
是不可能的,因为前面四个 API 与 JAXP 具有完全不同的用途。SAX、DOM、JDOM
和 dom4j 都解析 XML。JAXP 提供了一种到达这些解析器及其所涉及的数据的方
法,但并未提供一种解析 XML 文档的新方法。如果您要正确使用 JAXP,则理解
此差别是非常必要的。这还很有可能使您远远领先于您的 XML 开发同行。
如果仍有疑问,请确保您具有 JAXP 发行版(参阅 逐渐晋级)。启动 Web 浏览
器并加载 JAXP API 文档。导航至位于 s 软件包中的 API 的
解析部分。令人奇怪的是,您将只找到六个类。这个 API 到底怎么回事?所有
这些类都位于现有解析器的顶部。其中两个类仅用于错误处理。JAXP 比人们想
像的要简单得多。那么为何会有混淆呢?
位于顶部
甚至 JDOM 和 dom4j(参阅 参考资料)与 JAXP 一样都位于其他解析 API 的顶
部。但这两个 API 都提供了从 SAX 或 DOM 中访问数据的不同模型,它们在内
部使用 SAX(带有一些技巧和修改)来到达它们提供给用户的数据。
Sun 的 JAXP 和 Sun 的解析器
许多解析器/API 混淆来自于 Sun 软件包 JAXP 和该 JAXP 默认使用的解析器。
在 JAXP 的早期版本中,Sun 包括 JAXP API(带有刚才提到的六个类和一些常
用于转换的类)
和
一个叫做 Crimson 的解析器。Crimson 是 软
件包的一部分。在 JAXP 的新版本中 —— 包括在 JDK 中 —— Sun 已经重新
包装了 Apache Xerces 解析器(参阅 参考资料)。在这两种情况下,虽然解析
器是 JAXP 发行版的一部分,但不是 JAXP API 的一部分。
可以认为是 JDOM 附带了 Apache Xerces 解析器。该解析器不是 JDOM 的一部
分,但由 JDOM 使用,所以包括它是为了确保 JDOM 可以即装即用。同一原则适
用于 JAXP,但并未明确公布:JAXP 附带解析器是为了可以立即使用。但是,许
多人将 Sun 的解析器中包括的类作为 JAXP API 本身的一部分。例如,新闻组
上的常见问题通常是“我如何使用 JAXP 附带的 XMLDocument 类?它的作用是
什么?”答案有些复杂。
软件包名称中是什么?
当我第一次在 Java 1.5 中贸然打开源代码时,我惊奇于我所看到的 —— 或者
更应该说是我
没有
看到的。没有在正常中的软件包 中找到
Xerces,因为 Sun 将 Xerces 类重新分配给了
al。(我发现这有点不正常,但没有人问我。)
在任何情况下,如果您在 JDK 中查找 Xerces,就能找到它。
首先,ument 类不是 JAXP 的一部分。它是 Sun 的
Crimson 解析器的一部分,包装在 JAXP 的早期版本中。所以这个问题从一开始
就令人误解。其次,JAXP 的主要用途是在处理解析器时提供开发商独立性。有
了 JAXP,您可以用 Sun 的 XML 解析器、Apache 的 Xerces XML 解析器和
Oracle 的 XML 解析器来处理相同的代码。因而使用特定于 Sun 的类会违反使
用 JAXP 的要点。是否弄清楚了本主题是如何变得复杂起来的?JAXP 发行版中
的 API 和解析器 已经组合在一起,一些开发人员误将解析器中的类和特性作为
API 的一部分,反之亦然。
既然弄清楚了所有的混淆,那么您就可以深入了解一些代码和概念了。
版权声明:本文标题:JAXP 全面讲解 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1713611230a643267.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论