1 前言
在第1章中,我们用一个简单的XSLT样式表作为例子介绍了XSLT的概要。当然,XSLT所拥有的元素并不仅限于xsl:template、xsl:apply-templates、xsl:value-of。为了实行转换,XSLT准备了各种各样的元素。本章将以最常用的元素为中心举例说明。
另外,本文中并不准备介绍元素的全部属性。详情请参见W3C标准的原文[1]及译文[2]等。
在XSLT中经常会用到一种被称为XPath的描述方法。首先从XPath的概要开始介绍。
2 XPath是什么?
XPath是树结构的一种描述方法。在创建XSL样式表时经常使用XPath。
2.1 树结构
XML文档表示的数据组成数结构。用XLST进行转换,也就是从源文档的树(源树)生成转换后的树(目标树)的意思。这个转换以树结构的节点为基础来进行。
节点有几种,主要为:
- 表示根的“根节点”
- 表示元素的“元素节点”
- 表示属性的“属性节点”
- 表示文本的“文本节点”
- 表示注释的“注释节点”
使用像这样的各种各样的节点来表示树的位置的描述方法称为XPath。
2.2 XPath表达式
创建XSLT样式表时经常使用的XPath表达式如表1所示。所谓的上下文节点,就是由上下文构成的节点,可以理解为“处理对象”。另外,今后会出现“当前节点”的概念,可以理解为“被选中的节点”。 1
记号 | 含义 |
---|---|
a | 上下文节点的a元素 |
* | 上下文节点的所有元素 |
a/b | 以上下文节点的a元素为父节点的b元素 |
a//b | 以上下文节点的a元素为祖先的b元素 |
a|b | 上下文节点的a元素和b元素 |
a[表达式] | 符合表达式的上下文节点的a元素 |
. | 上下文节点 |
.. | 上下文节点的父节点 |
/ | 根节点 |
@a | 上下文节点的a属性 |
@* | 上下文节点的所有属性 |
node() | 所有节点 |
text() | 文本节点 |
<html> <body> <a href="sample.html">示例</a> <ul> <li>项目A</li> <li>项目B</li> </ul> </body></html>
/html/body/a
/html/body/a/@href
/html/body/ul/li[1]
3 定义样式表的元素
XSLT样式表使用XML文档的格式创建。因此,必须要遵从XML文档的描述规则。XML文档中必须存在的元素只有根元素。在XSLT样式表中的根元素就是xsl:stylesheet元素。基本代码如下所示:
<xsl:stylesheet version = "版本号"> <!-- 内容: (xsl:import*, 顶层元素) --></xsl:stylesheet>
4 模板规则
XSLT样式表可以说是模板规则的集合。
4.1 模板规则的定义
模板规则使用xsl:template元素进行定义。它的属性包括match、name、priority和mode。其中最重要的是match属性,该属性规定了节点的样式。若没有指定name属性的话,就必须指定match属性。基本的代码如下所示。
<xsl:template match = "样式" name = "名称"> <!-- 内容: (xsl:param*, 模板) --></xsl:template>
4.2 应用模板规则
我们使用xsl:apply-template元素来应用模板规则。它包含select和mode属性。基本的代码如下所示:
<xsl:apply-templates select = "节点集合表达式"> <!-- 内容: (xsl:sort | xsl:with-param)* --></xsl:apply-templates>