### XSLT 轻松入门第一章：XSLT 概念

提纲
本文共分五大章：XSLT 概念，XSLT 的实例，XSLT 的元素语法，XPath 的语法，XSLT 的资源。
1.XSLT 的概念
1.1 什么是 XSLT
1.2 为什么要用 XSLT
1.3 XSLT 的历史
1.4 什么是 XPath
1.5 XSLT 和 CSS 的比较
1.6 XSLT 和 IE5
1.XSLT 的概念
我们首先来澄清一个概念，大家可能听说过 XSL(eXtensible Stylesheet Language)，XSL 和我们这里说的 XSLT 从狭义上理解是一样的,而按照 W3C 的标准，XSLT 的说法更严格些，因此我们在文章中统一使用 XSLT 的称法。它们之间具体的关系我们会在下面讲述。
1.1 什么是 XSLT
XSLT 的英文标准名称为 eXtensible Stylesheet Language Transformation。根据 W3C 的规范说明书(http://www.w3.org/TR/xslt)，最早设计 XSLT 的用意是帮助 XML 文档(document)转换为其它文档。但是随着发展，XSLT 已不仅仅用于将 XML 转换为 HTML 或其它文本格式，更全面的定义应该是：
XSLT 是一种用来转换 XML 文档结构的语言。
1.2 为什么要用 XSLT
我们已经知道，XML 是一种电脑程序间交换原始数据的简单而标准的方法。它的成功并不在于它容易被人们书写和阅读，更重要的是，它从根本上解决了应用系统间的信息交换。因为 XML 满足了两个基本的需求：
(1).将数据和表达形式分离。就象天气预报的信息可以显示在不同的设备上，电视，手机或者其它。
(2).在不同的应用之间传输数据。电子商务数据交换的与日俱增使得这种需求越来越紧迫。
为了使数据便于人们的阅读理解，我们需要将信息显示出来或者打印出来，例如将数据变成一个 HTML 文件，一个 PDF 文件，甚至是一段声音；同样，为了使数据适合不同的应用程序，我们必须有能够将一种数据格式转换为另一种数据格式，比如需求格式可能是一个文本文件，一个 SQL 语句，一个 HTTP 信息，一定顺序的数据调用等。而 XSLT 就是我们用来实现这种转换功能的语言。将 XML 转换为 HTML，是目前 XSLT 最主要的功能。
1.3 XSLT 的历史
想很多其他 XML 家族成员一样，XSLT 是由 W3C 起草和制定的。它的主要发展历程如下：
.1995 年由 James Clark 提议；
.1997 年 8 月正式提案为 XSL；
.1998 年 5 月由 Norman Walsh 完成需求概要；
.1998 年 8 月 18 日 XSL 草案发布；
.1999 年 11 月 16 日正式发布 XSL 1.0 推荐版本。
目前，XSLT 仍然在快速的发展中，XSLT1.1 的草案已经可以在 W3C 网站(http://www.w3.org/TR/xslt11)上看到。
1.4 什么是 XPath
XPath 是 XSLT 的重要组成部分，我们将在第四章讲解它的详细语法。那么 XPath 是什么呢？我们首先来了解一下 XSL 系列的"家族"关系。如下图：
XSL 在转换 XML 文档时分为明显的两个过程，第一转换文档结构；其次将文档格式化输出。这两步可以分离开来并单独处理，因此 XSL 在发展过程中逐渐分裂为 XSLT(结构转换)和 XSL-FO(formatting objects)(格式化输出)两种分支语言，其中 XSL-FO 的作用就类似 CSS 在 HTML 中的作用。而我们这里重点讨论的是第一步的转换过程，也就是 XSLT。
另外，在学习 XML 时我们已经知道 XML 是一个完整的树结构文档。在转换 XML 文档时可能需要处理其中的一部分(节点)数据，那么如何查找和定位 XML 文档中的信息呢，XPath 就是一种专门用来在 XML 文档中查找信息的语言。XPath 隶属 XSLT，因此我们通常会将 XSLT 语法和 XPath 语法混在一起说。
用一种比较好理解的解释：如果将 XML 文档看作一个数据库，XPath 就是 SQL 查询语言；如果将 XML 文档看成 DOS 目录结构，XPath 就是 cd,dir 等目录操作命令的集合。
1.5 XSLT 和 CSS 的比较
CSS 同样可以格式化 XML 文档，那么有了 CSS 为什么还需要 XSLT 呢？因为 CSS 虽然能够很好的控制输出的样式，比如色彩，字体，大小等，但是它有严重的局限性，就是：
(1) CSS 不能重新排序文档中的元素；
(2) CSS 不能判断和控制哪个元素被显示，哪个不被显示；
(3) CSS 不能统计计算元素中的数据；
换句话说，CSS 只适合用于输出比较固定的最终文档。CSS 的优点是简洁，消耗系统资源少；而 XSLT 虽然功能强大，但因为要重新索引 XML 结构树，所以消耗内存比较多。
因此，我们常常将它们结合起来使用，比如在服务器端用 XSLT 处理文档，在客户端用 CSS 来控制显示。可以减少响应时间。
1.6 XSLT 和 IE5
在 XSLT 草案发布不久，微软就在 IE4 中提供了支持 XSL 功能的预览版本，到 IE5.0 发布时，正式全面支持 XSLT，可是由于 IE5 发布的比 XSLT1.0 标准时间早，因此在 IE5.0 中支持的 XSTL 功能和 XSLT 1.0 略有不同。(呵呵~~XML 推行的主要原因之一就是解决 HTML 过分依赖浏览器的问题，现在微软又想标新立异？)。好在微软的 IE5.5 中执行的标准已经和 W3C 的 XSLT1.0 基本相近。但令人头疼的是 IE5.0 已经发行了几百万套，您使用的 XSLT 很可能不能被客户的浏览器正确执行。目前 XSLT 1.1 仍在发展中，W3C 及有关组织也在和微软协商争取获得统一。呵呵~~故事还远远没有结束噢。
注意：本文中提到的语法都是根据 XSLT 1.0 的标准来讲的，没有任何微软的"方言"。