在 JAXP 的早期版本中,该首字母缩写代表 Java API for XML Parsing。在 第 1 部分 中了解到,JAXP 是位于 SAX 和 DOM 之上的层,它允许 Java 程序 员执行开发商中立的 XML 解析。最初,这是 JAXP 的全部特性。不过俗话说的 好,过去是过去,现在是现在。
过去,Java 和 XML 组合本身主要用于解析。Java 应用程序只需读入 XML 文档,然后按程序处理文档的数据。但随着 XML 消费应用程序流行起来,很显 然,各种应用程序所执行的操作有许多重叠。对于所有优秀的软件,重叠将导致 规范(而且每次都产生新的有用的 API)。
XML 的广泛使用所产生的第一个规范是 XSL。应用程序不断提取 XML 数据, 添加一些格式化,然后将其显示在用户界面上——通常是作为 HTML、XHTML 或 WML。XSL 完成此任务,并在其上构建规范,从而允许应用程序抛弃其所有的专 用转换代码。XSL 规范产生之后,XML 转换 API(Transformation API for XML ,TrAX)随之出现。 TrAX 提供了在 Java 应用程序中使用 XSL 的简单一致的 方法。目前,JAXP——相当长的链(和介绍)中的最后一链——已经将 TrAX 合 并到核心 Java 开发环境中。按照所有的发展,以及最近的添加(比如扩展验证 和 XPath 支持),JAXP 现在代表 Java API for XML Processing。本文重点介 绍使用 JAXP 进行处理而非解析。
由此及彼
理解 XSL 的基本程序流对于掌握 JAXP 如何处理转换是非常关键的。如果对 XSL 十分陌生,则需要快速回顾一下 XSL 基本概念。即使您是 XSL 专家也要忍 受我如此絮叨。
来源 (XML)
使用 XSL 时,必须从 XML 开始。我知道这听起来理所当然,但还是值得说 明一下。您可能习惯以 XML 文件开始(比如 phonebook.xml),并将其传递到 XSL 处理器中。JAXP 不仅允许您传递文件,它还允许您做好多事,在下一节 输 入和输出 中将学习相关内容。
样式表 (XSL)
可能吸引大多数设计人员的是 XSL 样式表。样式表是一个指令集合,它指定 特定类型的数据作为输入,并指定其他一组数据和格式化作为输出。但是切记, 样式表应该对入站 XML 的结构进行操作,而不是对文档中的特定数据进行操作 。这就确保样式表处理任何给定格式的 XML,而非特定的实例文档。
目标 (*ML)
最后需要记住,只能从 XSL 中输出格式良好的标记语言。不能输出 Microsoft Word 文档或 PDF。一定要使用标记语言,比如 XML、XHTML、WML 或 其他良好的 *ML(标记语言)变种。
当然,对此我听到异议——已经看到了从 XML 输出 PDF 的应用程序,或将 XML 转换为 Excel 的应用程序。而且,可以接受特定格式的 XML 并将其转换为 二进制格式的引擎确实存在。 但这并不属于 XSL 的领域;它是转换后处理。 JAXP 会帮助转换 XML,但它不允许转换为二进制格式。
输入和输出
通过简单的回顾可能已经了解到,许多 XML 转换只是关于输入和输出的。导 入 XML,对它进行操作,然后输出 *ML。在处理所有中间位(我意识到这是最有 趣的地方)之前,将展示如何将数据输入到 JAXP 和如何将其输出返回。