JAXP全面介绍,第1部分

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 文档。导航至位于 javax.xml.parsers 软件包中的 API 的解析部分。令人 奇怪的是,您将只找到六个类。这个 API 到底怎么回事?所有这些类都位于现 有解析器的顶部。其中两个类仅用于错误处理。JAXP 比人们想像的要简单得多 。那么为何会有混淆呢?

位于顶部

甚至 JDOM 和 dom4j与 JAXP 一样都位于其他解析 API 的顶部。但这两个 API 都提供了从 SAX 或 DOM 中访问数据的不同模型,它们在内部使用 SAX(带 有一些技巧和修改)来到达它们提供给用户的数据。

Sun 的 JAXP 和 Sun 的解析器

许多解析器/API 混淆来自于 Sun 软件包 JAXP 和该 JAXP 默认使用的解析 器。在 JAXP 的早期版本中,Sun 包括 JAXP API(带有刚才提到的六个类和一 些常用于转换的类)和 一个叫做 Crimson 的解析器。Crimson 是 com.sun.xml 软件包的一部分。在 JAXP 的新版本中 —— 包括在 JDK 中 —— Sun 已经重 新包装了 Apache Xerces 解析器。在这两种情况下,虽然解析器是 JAXP 发行 版的一部分,但不是 JAXP API 的一部分。

可以认为是 JDOM 附带了 Apache Xerces 解析器。该解析器不是 JDOM 的一 部分,但由 JDOM 使用,所以包括它是为了确保 JDOM 可以即装即用。同一原则 适用于 JAXP,但并未明确公布:JAXP 附带解析器是为了可以立即使用。但是, 许多人将 Sun 的解析器中包括的类作为 JAXP API 本身的一部分。例如,新闻 组上的常见问题通常是“我如何使用 JAXP 附带的 XMLDocument 类?它的作用 是什么?”答案有些复杂。

软件包名称中是什么?

当我第一次在 Java 1.5 中贸然打开源代码时,我惊奇于我所看到的 —— 或者更应该说是我没有 看到的。没有在正常中的软件包 org.apache.xerces 中 找到 Xerces,因为 Sun 将 Xerces 类重新分配给了 com.sun.org.apache.xerces.internal。(我发现这有点不正常,但没有人问我 。)在任何情况下,如果您在 JDK 中查找 Xerces,就能找到它。

首先,com.sun.xml.tree.XMLDocument 类不是 JAXP 的一部分。它是 Sun 的 Crimson 解析器的一部分,包装在 JAXP 的早期版本中。所以这个问题从一 开始就令人误解。其次,JAXP 的主要用途是在处理解析器时提供开发商独立性 。有了 JAXP,您可以用 Sun 的 XML 解析器、Apache 的 Xerces XML 解析器和 Oracle 的 XML 解析器来处理相同的代码。因而使用特定于 Sun 的类会违反使 用 JAXP 的要点。是否弄清楚了本主题是如何变得复杂起来的?JAXP 发行版中 的 API 和解析器已经组合在一起,一些开发人员误将解析器中的类和特性作为 API 的一部分,反之亦然。

既然弄清楚了所有的混淆,那么您就可以深入了解一些代码和概念了。

时间: 2024-10-01 23:17:25

JAXP全面介绍,第1部分的相关文章

Android创建与解析XML(一) 概述

Android 是最常用的智能手机平台,XML 是数据交换的标准媒介,Android 中可以使用标准的XML生成器.解析器.转换器 API,对 XML 进行解析和转换. XML,相关有DOM.SAX.JDOM.DOM4J.Xerces.JAXP等一堆概念,但是很多人总是会弄 混他们之间的关系,这对我们理解XML文件的创建和解析很不利.要挑选一个适合在Android平台上使用的XML解析方案,我们还 是得先把这些概念厘清. XML基本概念 DOM(Document Object Model,文档对

Android 创建与解析XML(一)—— 概述

Android 是最常用的智能手机平台,XML 是数据交换的标准媒介,Android 中可以使用标准的XML生成器.解析器.转换器 API,对 XML 进行解析和转换. XML,相关有DOM.SAX.JDOM.DOM4J.Xerces.JAXP等一堆概念,但是很多人总是会弄混他们之间的关系,这对我们理解XML文件的创建和解析很不利.要挑选一个适合在Android平台上使用的XML解析方案,我们还是得先把这些概念厘清. XML基本概念 DOM(Document Object Model,文档对象模

Java魔法堂:类加载器入了个门

一.前言   <Java魔法堂:类加载机制入了个门>中提及整个类加载流程中只有加载阶段作为码农的我们可以入手干预,其余均由JVM处理.本文将记录加载阶段的核心组件--类加载器的相关信息,以便日后查阅.若有纰漏请大家指正,谢谢.   注意:以下内容基于JDK7和HotSpot VM.   二.类加载器种类及其关系 从上图可知Java主要有4种类加载器 1. Bootstrap ClassLoader(引导类加载器):作为JVM的一部分无法在应用程序中直接引用,由C/C++实现(其他JVM可能通过

JDOM 介绍及使用指南

dom 转自:http://blog.csdn.net/hk2000c/archive/2003/09/26/15239.aspx JDOM 介绍及使用指南 一.JDOM 简介JDOM是一个开源项目,它基于树型结构,利用纯JAVA的技术对XML文档实现解析.生成.序列化以及多种操作.JDOM 直接为JAVA编程服务.它利用更为强有力的JAVA语言的诸多特性(方法重载.集合概念以及映射),把SAX和DOM的功能有效地结合起来.在使用设计上尽可能地隐藏原来使用XML过程中的复杂性.利用JDOM处理X

JSP标签库介绍

js JSP标签库介绍     我用JSP和ASP编程已经有一段颇长的时间了,在这两种服务器端的编程解决方案中,我越来越觉得JSP的功能要比ASP强大得多.我为什么要把JSP选作首选服务器端web应用程序开发工具呢?当然,JSP迷人的特性和功能不少,但JSP的标签库是让我做出这一决定的最重要诱因之一.        为什么这样说呢?原因有两个方面:维护和开发的速度.服务器端脚本语言其实就像是开发Internet的熔炉.在一个服务器页面上,你可以很方便地混合各种不同的脚本方法和对象.这种页面简直就

J2EE平台介绍

j2ee 今天,越来越多的程序设计人员希望借助服务器端技术的快捷.安全以及可靠性,为他们的企业开发分布式的交易应用系统.如果你已经工作在这一领域,你将非常清楚,在今天这样一个电子商务和信息技术飞速发展.并充满需求的世界上,企业应用必须以更少的资金.更快的速度和比以往更少的资源来设计.建造和运营. 为降低成本.快速实现企业应用的设计和开发,J2EE平台技术为企业应用的设计.开发.集成以及部署提供了一条基于组件的实现途径.J2EE平台为您提供了一个多层次分布是应用设计模式,重用组件的能力,统一的安全

JAXP全部内容,第2部分:使用Sun的XML处理工具包来转换XML

在 JAXP 的早期版本中,该首字母缩写代表 Java API for XML Parsing.在 第 1 部分 中了解到,JAXP 是位于 SAX 和 DOM 之上的层,它允许 Java 程序 员执行开发商中立的 XML 解析.最初,这是 JAXP 的全部特性.不过俗话说的 好,过去是过去,现在是现在. 过去,Java 和 XML 组合本身主要用于解析.Java 应用程序只需读入 XML 文档,然后按程序处理文档的数据.但随着 XML 消费应用程序流行起来,很显 然,各种应用程序所执行的操作有

Hibernate 3新增XML关系持久性介绍

非常感谢最近发布的Hibernate 3中的XML持久性特性,Java开发者现在拥有了一个框架组件,它为易于实现的对象关系(OR)和XML持久性提供了高效的和一致的方法. Hibernate的易用性.高性能和对象关系持久性等高级特性给IT界带来了很大的惊喜.Hibernate的最新版本(版本3,3月29日发布的)给产品API带来了一个重要的新特性:XML持久性.有了Hibernate 3之后,Java应用程序开发者可以轻易地把XML文档合并到关系型数据库中. 这个新特性应该明确地告诉已有的Hib

Log4j官方文档翻译(一、基本介绍)

log4j是使用java语言编写的可靠的.快速的.灵活的日志框架,它是基于Apache的license. log4j支持c,c++,c#,perl,python,ruby等语言.在运行时通过额外的配置文件配置,提供不同的日志级别以及多种日志输出种类,比如数据库,文件,控制台,syslog等等. log4j有三个主要部分: loggers 负责捕获日志信息 appenders 负责输出信息到不同的目的地 layouts 负责使用不同的样式输出日志 log4j的特性: 线程安全 优化速度 基于命名的