XSL :扩展样式表语言(EXtensible Stylesheet Language)。
XSL 包括三部分:
XSLT:一种用于转换 XML 文档的语言。
XPath:一种用于在 XML 文档中导航的语言。
XSL-FO:一种用于格式化 XML 文档的语言。
XSLT 是一种用于将 XML 文档转换为 XHTML 文档或其他 XML 文档的语言。
把文档声明为 XSL 样式表的根元素是 <xsl:stylesheet> 或 <xsl:transform>。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
或者:<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<table border="1">
<tr bgcolor="#9acd32">
<th align="left">Title</th>
<th align="left">Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
在html文档中引用<?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?>
match="/" 定义整个文档
<xsl:template> 元素用于构建模板。
<xsl:stylesheet>,定义此文档是一个 XSLT 样式表文档(连同版本号和 XSLT 命名空间属性)。
<xsl:value-of> 元素用于提取某个选定节点的值。如:
<xsl:value-of select="catalog/cd/title"/>
select 属性的值是一个 XPath 表达式。此表达式的工作方式类似于定位某个文件系统,在其中正斜杠可选择子目录
<xsl:for-each> 元素允许您在 XSLT 中进行循环。如:<xsl:for-each select="catalog/cd[artist=‘Bob Dylan‘]
">
= (等于)
!= (不等于)
< (小于)
> (大于)
<xsl:sort> 元素用于对结果进行排序。如:<xsl:sort select="artist"/>
<xsl:if> 元素用于放置针对 XML 文件内容的条件测试。
语法
<xsl:if test="expression">
...
...如果条件成立则输出...
...
</xsl:if>
XSLT <xsl:choose> 元素用于结合 <xsl:when> 和 <xsl:otherwise> 来表达多重条件测试。
<xsl:choose> 元素
语法
<xsl:choose>
<xsl:when test="expression">
... 输出 ...
</xsl:when>
<xsl:otherwise>
... 输出 ....
</xsl:otherwise>
</xsl:choose>
<xsl:apply-templates> 元素可把一个模板应用于当前的元素或者当前元素的子节点。
使用样式表必须要求浏览器支持xslt,可以通过使用 JavaScript,我们可以进行浏览器确认测试,根据浏览器和使用者的需求来使用不同的样式表
XSLT 的设计目的之一就是使一种格式到另一种格式的转换成为可能,同时支持不同类型的浏览器以及不同的用户需求。并向所有类型的浏览器返回可读的数据。
<script type="text/javascript">
// Load XML
var xml = new ActiveXObject("Microsoft.XMLDOM")
xml.async = false
xml.load("cdcatalog.xml")
// Load XSL
var xsl = new ActiveXObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load("cdcatalog.xsl")
// Transform
document.write(xml.transformNode(xsl))
</script>
1、<xsl:apply-imports> 元素可应用来自导入样式表中的模版规则。
导入样式表中的模版规则的优先级要比主样式表中的模版规则要低。
如:<xsl:import href="standard.xsl"/>
<xsl:template match="message">
<div style="border:solid blue">
<xsl:apply-imports/>
</div>
</xsl:template>
2、<xsl:apply-templates> 元素可向当前元素或当前元素的子元素应用模板。
Select:可选。规定要处理的节点。星号选取整个节点集。如果省略该属性,则将选取当前节点的所有子节点。
3、<xsl:attribute> 元素用于向元素添加属性。注释:<xsl:attribute> 元素会替换名称相同的已有属性。
Name:必需。规定属性的名称。
Namespace:可选。为属性定义命名空间的 URI。
<xsl:attribute-set name="font">
<xsl:attribute name="fname">Arial</xsl:attribute>
<xsl:attribute name="size">14px</xsl:attribute>
<xsl:attribute name="color">red</xsl:attribute>
</xsl:attribute-set>
4、xsl:attribute> 元素用于向元素添加属性。
5、<xsl:call-template> 元素可调用一个指定的模板。
Name:必需。规定被调用的模板名称。
6、<xsl:comment> 元素用于在结果树中创建注释节点。
7、<xsl:copy> 元素可创建当前节点的一个副本(拷贝)。
注释:当前节点的 Namespace 节点会被自动复制,但是当前节点的子节点和属性不会被自动复制!
use-attribute-sets: 可选。如果该节点是元素,则该属性是应用到输出节点的属性集列表,由空格分隔
8、<xsl:copy-of> 元素可创建当前节点的一个副本。注释:当前节点的 Namespace 节点、子节点以及属性都会被自动复制!
9、<xsl:decimal-format> 元素定义了当通过 format-number() 函数把数字转换为字符串时,所要使用的字符和符号。
name |
name |
可选。为此格式规定名称。 |
decimal-separator |
char |
可选。规定小数点字符。默认是 "."。 |
grouping-separator |
char |
可选。规定千的分隔字符。默认是 ","。 |
infinity |
string |
可选。规定用来表示无穷大的字符串。默认是 "Infinity"。 |
minus-sign |
char |
可选。规定表示负数的字符。默认是 "-"。 |
NaN |
string |
可选。规定当值不是数字时使用的字符串。默认是 "NaN"。 |
percent |
char |
可选。规定百分比符号的字符。默认是 "%"。 |
per-mille |
char |
可选。规定千分号的字符。默认是 "‰"。 |
zero-digit |
char |
可选。规定数字 0 的字符。默认是 "0"。 |
digit |
char |
可选。规定字符,该字符用于指示需要使用数字的地方。默认是 #。 |
pattern-separator |
char. |
可选。规定字符,该字符用于分隔格式模式中的正负次模式。默认是 ";"。 |
如:
<xsl:decimal-format name="euro" decimal-separator="," grouping-separator="."/>
<xsl:template match="/">
<xsl:value-of select="format-number(26825.8, ‘#.###,00‘, ‘euro‘)
"/>
</xsl:template>
10、<xsl:element> 元素用于在输出文档中创建元素节点。
属性 |
值 |
描述 |
name |
name |
必需。规定要创建的元素的名称(可以使用表达式为 name 属性赋值,这个表达式是在运行时进行计算的,比如:<xsl:element name="{$country}" />) |
namespace |
URI |
可选。规定元素的命名空间 URI。(可以使用表达式为 namespace 属性赋值,这个表达式是在运行时进行计算的,比如:<xsl:element name="{$country}" namespace="{$someuri}"/>) |
use-attribute-sets |
namelist |
可选。空格分隔的属性集,该属性集包含了需要向元素添加的属性。 |
11、<xsl:fallback> 元素规定了在 XSL 处理程序不支持 XSL 元素时,所执行的替代代码。
12、<xsl:import> 元素是顶层元素,用于把一个样式表中的内容倒入另一个样式表中。
注释:被导入的样式的优先级低于导出的样式表
13、<xsl:include> 元素是顶层元素(top-level element),把一个样式表中的样式表内容包含到另一个样式表中。
注释:被包含的样式表(included style sheet)拥有与包含的样式表(including style sheet)相同的优先级。
注释:该元素必须是 <xsl:stylesheet> 或 <xsl:transform> 的子节点。
href |
URI |
必需。规定要包含的样式表的 URI。 |
14、<xsl:key> 元素是顶层元素,它可声明一个命名的键(即为 XML 文档中指定的元素分配的名称和值对)。
此键通过 key() 函数在样式表中使用,帮助您有效地在复杂的 XML 文档中访问分配的元素。。
注释:键不必是唯一的!
属性 |
值 |
描述 |
name |
name |
必需。规定键的名称。 |
match |
pattern |
必需。定义该键被应用到哪个节点。 |
use |
expression |
必需。指定要作为该键的值使用的表达式。 键值可以是下列任一值:属性、子元素或匹配元素的内容。 |
15、<xsl:message> 元素可向输出写一条消息。该元素主要用于报告错误。
该元素能够包含几乎任何其他的 XSL 元素(<xsl:text> 、<xsl:value-of> 等等)。
terminate 属性允许您选择在错误发生时,是否应终止转换。
16、<xsl:namespace-alias> 元素用于在输出中把样式表中的命名空间替换为不同的命名空间,换句话说,使用其他前缀替换与给定命名空间关联的前缀。
注释:<xsl:namespace-alias> 是顶层元素(top-level element),且必须是 <xsl:stylesheet> 或 <xsl:transform> 的子元素。
属性 |
值 |
描述 |
stylesheet-prefix |
prefix #default |
必需。规定您希望更改的命名空间。 |
result-prefix |
prefix #default |
必需。为输出规定期望的命名空间。 |
17、<xsl:number> 元素用于测定在源中当前节点的整数位置。它也用于将格式化的数字插入结果树。
属性 |
值 |
描述 |
||
count |
expression |
可选。XPath 表达式,规定要计算的节点。 |
||
level |
single multiple any |
可选。控制如何分配序号。 值可以是: single (默认) multiple any (Netscape 6 不支持) |
||
from |
expression |
可选。XPath 表达式,规定从何处开始计数。 |
||
value |
expression |
可选。规定用户提供的数字,用于代替产生的序号。 |
||
format |
formatstring |
可选。定义数字的输出格式。可以使用的值。 |
||
lang |
languagecode |
可选。规定用于编号的语言字母表。 |
||
letter-value |
alphabetic traditional |
可选。消除使用字母的编号序列之间的歧义。值 "alphabetic" 指定字母序列;值 "traditional" 指定其他序列。默认值为 "alphabetic"。 |
||
grouping-separator |
character |
可选。规定使用什么字符来分隔组或数字。默认是逗号。 |
||
grouping-size |
number |
可选。规定分组的大小。默认是 3。 |
||
式标记 |
生成的序列 |
|||
1 |
1 2 3 4 5 ... 10 11 12 ... |
|||
01 |
01 02 03 ... 19 10 11 ... 99 100 101... |
|||
a |
a b c . . |
|||
A |
A B C ...Z AA AB AC... |
|||
i |
i ii iii iv v vi vii viii ix x... |
|||
I |
I II III IV V VI VII VIII IX X... |
|||
18、<xsl:output> 元素定义了输出文档的格式。
注释:<xsl:output> 是顶层元素(top-level element),必须是 <xsl:stylesheet> 或 <xsl:transform> 的子节点。
method |
xml html text name |
可选。定义输出的格式。默认是 XML。Netscape 6 仅支持 "html" 和 "xml"。 |
version |
string |
可选。设置输出格式的 W3C 版本号。(仅在 method="html" or method="xml" 时使用)。 |
encoding |
string |
可选。设置输出中编码属性的值。 |
omit-xml-declaration |
yes no |
可选。 "yes" 规定在输出中省略 XML 声明 (<?xml...?>)。 "no" 规定应在输出中包含 XML 声明。默认是 "no"。 |
standalone |
yes no |
可选。规定 XSLT 处理器是否应输出独立文档声明;该值必须为 yes 或 no。默认是 "no"。Netscape 6 不支持该属性。 |
doctype-public |
string |
可选。规定 DTD 中要使用的公共标识符。即输出中 DOCTYPE 声明的 PUBLIC 属性的值。 |
doctype-system |
string |
可选。规定 DTD 中要使用的系统标识符。即输出中 DOCTYPE 声明的 SYSTEM 属性的值。 |
cdata-section-elements |
namelist |
可选。一个空格分隔的元素列表,这些元素的文本内容应作为 CDATA 部分来输出。 |
indent |
yes no |
可选。在输出结果树时是否要增加空白;该值必须为 yes 或 no。Netscape 6 不支持该属性。 |
media-type |
string |
可选。定义输出的 MIME 类型(数据的媒体类型)。默认是 "text/xml"。Netscape 6 不支持该属性。 |
19、<xsl:param> 元素用于声明局部或全局参数。
注释:如果在模板内声明参数,就是局部参数,如果作为顶层元素来声明,就是全局参数
属性 |
值 |
描述 |
name |
name |
必需。规定参数的名称。 |
select |
expression |
可选。规定 XPath 表达式,该表达式是参数的默认值。 |
20、<xsl:preserve-space> 元素用于定义保留空白的元素。
<xsl:strip-space> 元素用于定义删除空白的元素。
注释:保留空白是默认的设置,所以只有当使用 <xsl:strip-space> 元素使才有必要使用 <xsl:preserve-space> 元素。
注释:<xsl:preserve-space> 元素和 <xsl:strip-space> 元素都是顶层元素(top-level element)。
21、<xsl:processing-instruction> 元素可向输出写一条处理指令,即生成处理指令节点。
name |
process-name |
必需。规定处理指令的名称。 |
22、<xsl:sort> 元素用于对结果进行排序。
注释:<xsl:sort> 总是位于 <xsl:for-each> 或 <xsl:apply-templates> 内部。
select |
XPath-expression |
可选。规定节点的排序关键字,即根据哪个节点或节点集来排序。 |
lang |
language-code |
可选。规定排序所用的语言。 |
data-type |
text number qname |
可选。规定被排序的数据的数据类型。默认是 "text"。 |
order |
ascending descending |
可选。规定排序顺序。默认是 "ascending"。 |
case-order |
upper-first lower-first |
可选。规定是否首先按大写字母顺序进行排序。 |
23、<xsl:stylesheet> 和 <xsl:transform> 元素是完全同义的元素。都被用来定义样式表的根元素。
version |
version |
必需。规定样式表的 XSLT 版本。 |
extension-element-prefixes |
list |
可选。扩展元素的命名空间前缀列表,用空格分隔。 Netscape 6 不支持该属性。 |
exclude-result-prefixes |
list |
可选。不应再输出中出现的命名空间前缀列表,用空格分隔。 |
id |
name |
可选。样式表的唯一 id。 Netscape 6 不支持该属性。 |
24、<xsl:template> 元素包含了当匹配指定节点时要应用的规则。
match 属性用于把模板关联到某个 XML 元素。match 属性也能用于为 XML 文档的全部分支定义模板(比如,match="/" 定义了整个文档)。
注释:<xsl:template> 是顶层元素(top-level element)。
name |
name |
可选。为模板定义名称。 注释:如果省略该属性,则必须设置 match 属性。 |
match |
pattern |
可选。模板的匹配模式。 注释:如果省略该属性,则必须设置 name 属性。 |
mode |
mode |
可选。为模板规定模式。 |
priority |
number |
可选。模板的优先级编号。 |
25、<xsl:text> 元素用于向输出写文本,即通过样式表生成文本节点。
disable-output-escaping |
yes no |
可选。 默认值为 "no"。如果值为 "yes",通过实例化 <xsl:text> 元素生成的文本节点在输出时将不进行任何转义。 比如如果设置为 "yes",则 "<" 将不进行转换。如果设置为 "no",则被输出为 "<"。 Netscape 6 不支持该属性。 |
26、<xsl:stylesheet> 和 <xsl:transform> 元素是完全同义的元素。都被用来定义样式表的根元素。
27、<xsl:value-of> 元素可提取选定节点的值。
<xsl:value-of> 元素可用于选取某个 XML 元素的值,并把它输出。
注释:select 属性(必选)的值是一个 XPath 表达式。
select |
expression |
必需。XPath 表达式,规定了从哪个节点/属性来提取值。 |
disable-output-escaping |
yes no |
默认值为 "no"。如果值为 "yes",通过实例化 <xsl:text> 元素生成的文本节点在输出时将不进行任何转义。 比如如果设置为 "yes",则 "<" 将不进行转换。如果设置为 "no",则被输出为 "<"。 |
28、<xsl:variable> 元素用于声明局部或全局的变量。
注释:如果被声明为顶层元素,则该变量是全局的,而如果在模板内声明,则变量是本地的。
注释:一旦您设置了变量的值,就无法改变或修改该值!
提示:您可以通过 <xsl:variable> 元素的内容或通过 select 属性,向变量添加值!
name |
name |
必需。规定变量的名称。 |
select |
expression |
可选。定义变量的值。 |
29、<xsl:with-param> 元素定义了传递给模板的参数的值。
<xsl:with-param> 元素的 name 属性的值必须与 <xsl:param> 元素中的 name 相匹配,否则将忽略 <xsl:with-param> 元素,。<xsl:call-template> 和 <xsl:apply-templates> 中均允许使用 <xsl:with-param> 元素。
name |
name |
必需。规定参数的名称。 |
select |
expression |
可选。定义参数的值的 XPath 表达式。 |
XQuery 1.0、XPath 2.0 以及 XSLT 2.0 共享相同的函数库。
名称 |
描述 |
current() |
返回当前节点作为唯一成员的节点集。 |
document() |
用于访问外部 XML 文档中的节点。 |
element-available() |
检测 XSLT 处理器是否支持指定的元素。 |
format-number() |
把数字转换为字符串。 |
function-available() |
检测 XSLT 处理器是否支持指定的函数。 |
generate-id() |
返回唯一标识指定节点的字符串值。 |
key() |
检索以前使用 <xsl:key> 语句标记的元素。 |
node-set |
将树转换为节点集。产生的节点集总是包含单个节点并且是树的根节点。 |
system-property() |
返回系统属性的值。 |
unparsed-entity-uri() |
返回未解析实体的 URI。 |