标题：XSL
简介
XSL 之于 XML ,就像 CSS 之于 HTML。它是指可扩展样式表语言 (EXtensible Stylesheet Language)。这是一种用于以可读格式呈现 XML 数据的语言。
xsl是一种标记语言，表示如何将xml文档的内容装换成另一种形式的文档。
通过为xml写xsl来使得xml显示成不同的格式 
XSL 实际上包含两个部分： 
* XSLT – 用于转换 XML 文档的语言 
* XPath – 用于在 XML 文档中导航的语言 
XSLT 是指 XSL 转换 (XSL Transformation)，它是 XSL 最重要的部分。 
XSLT 可以将 XML 文档转换为其它 XML 文档、XHTML 输出或简单的文本。这通常是通过将每个 XML 元素转换为 HTML 元素来完成的。由于 XML 标签是用户定义的，浏览器不知道如何解释或呈现每个标签，因此必须使用 XSL。XML 标签的意义是为了方便用户（而不是计算机）理解。
XSLT 还可以对 XML 树进行下列操作：
* 添加和删除元素 
* 添加和删除属性 
* 对元素进行重新排列或排序 
* 隐藏或显示某些元素 
* 查找或选择特定元素
语法
您可能还记得 XML 概述文章中提到过，所有 XML 文档都是以 XML 声明开头。XSL 样式表也是一样。任何 XSL 文档的第一行实际上都是 XML 声明：
<?xml version="1.0" encoding="ISO-8859-1"?>
XSL 是否与 XML 相同
既是又不是。说是，是因为它们遵循相同的语法规则（只有少许差异，下面我将会讲到）。说不是，是因为它们的用途不同：XML 用于承载数据，而 XSL 则用于设置数据的格式。
在 XML 声明之后，就是 XSL 声明，例如：
<xsl:stylesheet>
或
<xsl:transform>
但是，在大多数实际情况下，XSL 声明看起来要稍微复杂一些：
<xsl:stylesheet xmlns:xsl="http://www w3 org/1999/XSL/Transform" version="1.0">
这是因为，根据 W3C 联盟的建议，它还包含命名空间和 XSL 规范的版本。
XSL 声明与 XML 声明的不同之处在于，XML 声明只写一行，而且没有结束标签，而 XSL 声明必须包含结束标签，该标签表示 XSL 样式表结束：
</xsl:stylesheet>
请注意，这并不与 XML 语法规则冲突：XSL 样式表是完全有效的 XML 文档，因为它有一个根元素，由 <xsl:stylesheet> 标签指定。
用途
XSL 在设计时有几个目标用途，这些用途使它成为某些开发情况下的完美解决方案，而对另一些开发情况则毫无用处。
XSL 专门用于处理 XML 文档，并且遵循 XML 语法。因此，它只能在支持 XML 的应用程序中与 XML 结合使用。最合适使用 XML 和 XSL 的情况是：Web 门户、新闻聚合器、社区网站或其它任何需要向各种设备及大量客户端提供信息的 Web 应用程序。 
XSLT 是一种基于模式匹配的语言。它会查找匹配特定条件的节点，然后应用相应的规则。因此，它不具备大多数编程语言的计算能力。例如，XSL 无法在运行时更改变量的值。它不应该用于从使用复杂公式的动态数据源（例如在线商店）来计算值。Web 编程语言更适于此用途。 
XSL 不能代替或补充 CSS。它不应（也不能）用于设置 HTML 的样式。但是，您可以将其用于需要频繁重新设计可视化效果、频繁更换布局以及以灵活格式处理数据的网站。 
XSL 不是内容管理工具。它不应（也不能）用于更改 XML 文档的内容或者编辑信息。但是，您可以将 XML 和 XSL 用于需要处理几种不同格式文档的内容管理系统。 
它起始于 XSL，结束于 XSLT、XPath 以及 XSL-FO。
起始于 XSL
XSL 指扩展样式表语言（EXtensible Stylesheet Language）。
万维网联盟 (W3C) 开始发展 XSL 的原因是：存在着对于基于 XML 的样式表语言的需求。
CSS = HTML 样式表
HTML 使用预先定义的标签，标签的意义很容易被理解。
HTML 元素中的 元素定义表格 - 并且浏览器清楚如何显示它。
向 HTML 元素添加样式是很容易的。通过 CSS，很容易告知浏览器用特定的字体或颜色显示一个元素。
XSL = XML 样式表
XML 不使用预先定义的标签（我们可以使用任何喜欢的标签名），并且这些标签的意义并不都那么容易被理解。
元素意味着一个 HTML 表格，一件家具，或是别的什么东西 - 浏览器不清楚如何显示它。
XSL 可描述如何来显示 XML 文档！
XSL - 不仅仅是样式表语言
XSL 包括三部分：
XSLT 
一种用于转换 XML 文档的语言。 
XPath 
一种用于在 XML 文档中导航的语言。 
XSL-FO 
一种用于格式化 XML 文档的语言。
应用
数据库技术领域，具体为一种快速执行可扩展样式表单语言转换(XSLT)的方法。该方法首先通过构造转换树，将XML文档的结构信息和XSLT转换要求结构起来，然后从转换树建立流处理模型；扫描XML源文档，通过流处理模型，将一个XSLT转换程序转换成很多个事件处理器，对应于扫描过程中触发的每一类事件，都有一个对应的事件的输出片断被添加到已产生的结果文档后面；扫描结束后，即得到最终完整的结果文档。本发明方法完全避免了现有转换引擎需要预先将整个源文档载入内存的缺点，减少了内存消耗，大大提高了执行效率。即使对于非常大的XML数据，也能通过一趟扫描完成转换过程。　
1、一种快速执行XSLT转换的方法，其特征在于通过一个流处理模型来执行XSLT转换，具体步骤如下：(1)首先通过构造转换树，将XML源文档的结构信息和XSLT转换要求结合起来，其步骤为：构造XML文档类型定义的DTD树T；考察XSLT转换程序L的每一条转换规则r，在T中找到r的匹配节点n；继续考察r的输出模板序列中的每一个元素o，如果o是一个常数字符串，为树T创建一个叶子节点n’，添加一条从n到n’的边；如果o是调用模板命令，从树T中找到o的选中节点n’，同样添加一条从n到n’的边；(2)从转换树建立流处理模型，它是一个递归过程，其步骤为：对转换树的任一节点n，end(n)，start(n)初始值为空串；如果n是叶子节点，则令end(n)：=pcdata+end(n)；以c1，c2，...，cp表示节点n下面所有来自于DTD树的孩子节点，以d1，d2，...，dq表示节点n下面所有来自于XSLT转换程序的孩子节点，如果d1是一个常数字符串节点，则令start(n)：=start(n)+d1，并且设置计数器i为2，否则，设置计数器i为1；当i不大于q的时候，重复以下步骤：假设c是位于从节点n到节点di这条路径上的n的孩子节点，如果从n到c的边没有被星号标记，并且di+1是常数串节点，则令end(c)：=end(c)+di+1和i：=i+2，否则令i：=i+1；如果di+1是常数串节点，假设c′是位于从节点n到节点di+2这条路径上的n的孩子节点，则令start(c′)：=di+1+start(c′)和i：=i+2，否则令i：=i+1；对每一个孩子节点dj，递归调用以上过程；(3)扫描XLM源文档，通过流处理模型，将一个XSLT转换程序转化成很多个事件处理器；在从头到尾读XML取源文档的过程中会触发很多事件，对每一类事件，都有一个对应的输出片断；最开始的时候，结果文档为空，随着对源文档的扫描过程的进行，相应事件的输出片断被逐渐添加到已产生的结果文档的后面；在扫描过程结束后，用户马上就可以得到最终完整的结果文档；其中，end(n)为元素结束事件的输出片段，start(n)为元素开始事件的输出片段，pcdata为当前叶子节点的PCDATA值。　[1]