1. 定义模板
(1) 什么是模板?
模板是XSL中一个非常重要的概念。
可以这么认为,XSL样式表是由一个一个的模板组成的。每个XSL样式表至少要包含一个模板。
模板的作用:指定对XML文档中哪些元素进行格式化,以及具体如何进行格式化。
(2) 如何定义模板?
定义一个XSL模板的语法格式如下:
<xsl:template match="pattern">
<!--指定具体如何进行格式化-->
</xsl:template>
其中:
1 “<xsl:template>”是模板定义的开始标记,“</xsl:template>”是模板定义的结束标记。
2 match属性用于指定对XML文档中哪些元素进行格式化,取值由匹配模式pattern决定,如下表所示:
pattern | 示例 | 说明 |
/ | <xsl:template match="/"> | 与根节点匹配,对根节点下所有子节点进行格式化。 |
element | <xsl:template match="产品"> | 与产品节点匹配,对产品节点下所有子节点进行格式化。 |
parent/child | <xsl:template match="产品信息/产品"> | 与产品信息节点下的产品子节点匹配,对产品节点下所有子节点进行格式化。 |
(3) 定义模板,要注意以下几点:
1 在模板中,可以直接使用合法的HTML标记。
2 模板定义不能嵌套,也即不能在一个模板内部,再定义一个模板。
3 模板必须是XSL文件中根元素<xsl:stylesheet>的直接子元素。
2. 应用模板
如何应用已经定义好的模板?
在XSL文件中定义好模板之后,可以应用这个模板,其语法格式如下:
<xsl:apply-templates [select="pattern"]></xsl:apply-templates>
其中:
1 “<xsl:apply-templates>”是开始标记,“</xsl:apply-templates>”是结束标记。
2 select属性是可选的。
因此,应用模板有两种形式,如下所示:
第一种:不带select属性的 <xsl:apply-templates/>
第二种:带select属性的<xsl:apply-templates select="pattern"/>
当XML解析器遇到应用模板指令时,将会处理指定模板所匹配节点下所有子节点。
3. XSL模板应用实例
(1) 创建一个描述产品信息的XML文档,如下所示:
<?xml version="1.0" encoding="GB2312"?>
<产品信息>
<产品 产品编号="P001">
<名称>牙膏</名称>
<价格>3.5</价格>
<数量>100</数量>
</产品>
<产品 产品编号="P002">
<名称>牙刷</名称>
<价格>1.5</价格>
<数量>100</数量>
</产品>
<产品 产品编号="P003">
<名称>毛巾</名称>
<价格>6.5</价格>
<数量>100</数量>
</产品>
<产品 产品编号="P004">
<名称>杯子</名称>
<价格>4.5</价格>
<数量>100</数量>
</产品>
</产品信息>
(2) 创建一个XSL文件,用于格式化上述XML文档,如下所示:
<?xml version="1.0" encoding="GB2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:apply-templates select="产品信息"/>
</xsl:template>
<xsl:template match="产品信息">
<html>
<body>
<table border="1px" align="center" width="400px" cellspacing="0px"
cellpadding="5px">
<tr align="center">
<th>产品编号</th>
<th>产品名称</th>
<th>产品价格</th>
<th>产品数量</th>
</tr>
<xsl:apply-templates select="产品"/>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="产品">
<tr align="center">
<td><xsl:value-of select="@产品编号"/></td>
<td><xsl:value-of select="名称"/></td>
<td><xsl:value-of select="价格"/></td>
<td><xsl:value-of select="数量"/></td>
</tr>
</xsl:template>
</xsl:stylesheet>
注意:在XSL文件中,必须要有一个根模板,往往第一个出现的模板就是根模板。
根模板是指匹配到根节点的模板,根模板的定义,如下所示:
<xsl:template match="/">
<!--指定具体如何进行格式化-->
</xsl:template>
在XSL文件中,除了根模板之外,一般还会定义一些其它的模板,这些模板用于对XML文档中指定元素进行格式化。
XSL处理器总是从根模板开始匹配XML文档,在处理的过程中再调用其它的模板。
(3) 将XSL文件与XML文档关联起来,如下所示:
<?xml version="1.0" encoding="GB2312"?>
<?xml-stylesheet type="text/xsl" href="products.xsl"?>