1 简介
XSLT 转换是良构的XML 文档,遵循XML 命名规范。XSLT 定义的元素通过专门的名称空间与其他名称区分开。
XSLT 转换描述了从源树到结果树的转化规则。转换的关键是模式和模板。模式与源树中的元素匹配,模板本质上是用于创建结果树的一部分。在构造结果树的过程中,源树中的元素可能被过滤或者改变顺序,也可以增加新的结构。
样式表由一组模板规则组成。模板规则包括两部分:与源树中节点匹配的模式,可以实例化作为结果树一部分的模板。
模板针对源树中特定的元素实例化来创建结果树中的一部分。模板可以包含定义字面结果元素结构的元素,也可包含XSLT 元素,后者是创建结果树片段的指令。模板实例化的时候,将执行所有的指令并用创建的结果树片段代替。指令可以选择和处理后代元素。处理后代元素的时候将查找适用的模板规则并实例化对应的模板。只有指令执行中选中的元素才会被处理。通过查找根节点的模板规则并实例化其模板来构造结果树。
可能有多个模板规则模式与某个元素匹配,但是只有一个被应用(参见5.5 )。
模板实例化总是相对于当前节点和当前节点列表进行的。当前节点是当前节点列表的一个成员。XSLT 的很多操作都是关于当前节点的,只有少数指令改变当前节点列表或者当前节点,这些指令实例化的过程中,当前节点列表发生了改变,新表中的每个成员依次成为当前节点;实例化结束后,当前节点和当前节点列表又回到实例化之前的状态。
XSLT 采用XPath 表达式选择处理的元素、条件处理和生成文本 。
MIME 类型为 text/xml 和 application/xml 。
XSLT 名称空间URI 为 http://www.w3.org/1999/XSL/Transform 。前缀使用“xsl :”。
stylesheet 元素:
<xsl:stylesheet
id = id
extension-element-prefixes = tokens
exclude-result-prefixes = tokens
version = number >
<!-- Content: ( xsl:import *, top-level-elements ) -->
</xsl:stylesheet>
l xsl:transform 和xsl:stylesheet. 可互换使用
l xsl:stylesheet 元素必须有version 属性。
l xsl:stylesheet 元素的孩子称为顶层元素。
l xsl:import 元素如果有的话必须是第一个。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="..."/>
<xsl:include href="..."/>
<xsl:strip-space elements="..."/>
<xsl:preserve-space elements="..."/>
<xsl:output method="..."/>
<xsl:key name="..." match="..." use="..."/>
<xsl:decimal-format name="..."/>
<xsl:namespace-alias stylesheet-prefix="..." result-prefix="..."/>
<xsl:attribute-set name="..."> ... </xsl:attribute-set>
<xsl:variable name="...">...</xsl:variable>
<xsl:param name="...">...</xsl:param>
<xsl:template match="..."> ... </xsl:template>
<xsl:template name="..."> ... </xsl:template>
</xsl:stylesheet>
这种样式表只能包含一个用于根节点的模板,每个样式表只能包含一个字面结果元素。比如:
<html xsl:version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/TR/xhtml1/strict">
<head>
<title>Expense Report Summary</title>
</head>
<body>
<p>Total Amount: <xsl:value-of select="expense-report/total"/></p>
</body>
</html>
相当于:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/TR/xhtml1/strict">
<xsl:template match="/">
<html>
<head>
<title>Expense Report Summary</title>
</head>
<body>
<p>Total Amount: <xsl:value-of select="expense-report/total"/></p>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
作为样式表文档元素的字面结果元素必须包含xsl:version 属性,不能包含顶层元素。不建议采用这种简单语法。
XSLT 内部对象模板、mode 、属性集、键、小数格式、变量和参数的名称都是QName 。
2.6 组合样式表
XSLT 提供了两种组合样式表的机制:包含和引入。
<!-- Category: top-level-element -->
<xsl:include href = uri-reference />
Xsl:include 只能作为顶层元素出现。href 属性指定了要包含的样式表。包含在XML 树这一层上完成。被包含样式表作为XML 文档解析,xsl:stylesheet 的所有孩子元素被取出来替代包含样式表中的include 指令。重复或循环包含将导致错误。
<xsl:import href = uri-reference />
xsl:import 只能作为顶层元素出现,而且必须出现在所有其他元素,包括xsl:include 之前。被导入的样式规则优先级低于本地规则。
2.7 嵌入样式表