<xsl:apply-imports> 元素
--------------------------------------------------------------------------------
定义与用法
<xsl:apply-imports>运用了一个从外部导入的xsl作为Template.
导入的Template的样式表比宿主xsl的样式表优先级要低.
--------------------------------------------------------------------------------
语法
<xsl:apply-imports/>
Attributes
None
例子
假设我们有一个样式表叫"standard.xsl",它包含一个为message elements定义的template
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="message">
<h2>
<xsl:apply-templates/>
</h2>
</xsl:template>
</xsl:stylesheet>
宿主样式表要能导入"standard.xsl",并且修改message elements,像如下这样:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="standard.xsl"/>
<xsl:template match="message">
<div style="border:solid blue">
<xsl:apply-imports/>
</div>
</xsl:template>
</xsl:stylesheet>
结果会把message elements转变成如下这样:
<div style="border:solid blue"><h2>...</h2></div>
用这种方式,可以实现xsl的重用。
<xsl:apply-templates> 元素
--------------------------------------------------------------------------------
定义与用法
<xsl:apply-templates>元素将模版运用到当前元素或者是当前元素的子节点。
如果我们在<xsl:apply-templates>元素中增加一个select属性,它将只对与属性匹配的子元素有效。我们可以用select属性来指定要处理的子节点。
--------------------------------------------------------------------------------
语法
<xsl:apply-templates select="expression" mode="name">
<!-- Content:(xsl:sort|xsl:with-param)* -->
</xsl:apply-templates>
属性
属性 值 说明
select expression select表达式是可选的用于指定要处理的节点。一个星号*选择了全部的节点集。如果属性省略了,那么所有的子节点都将被选择。
mode name mode也是可选的,如果对一个相同的元素有很多定义,那么用mode可以区分他们。
例子 1
对于文档中的每一个tiltle元素用h1元素包装。
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="title">
<h1><xsl:apply-templates/></h1>
</xsl:template>
</xsl:stylesheet>
例子 2
对于文档中的所有message 元素的子元素tiltle用h1元素包装。
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="message">
<h1><xsl:apply-templates select="title"/></h1>
</xsl:template>
</xsl:stylesheet>
例子 3
对于文档中的所有message 元素的所有子元素用h1元素包装,mode属性被置为”big”。
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="message">
<h1><xsl:apply-templates select="*" mode="big"/></h1>
</xsl:template>
</xsl:stylesheet>
<xsl:attribute>元素
定义与用法
<xsl:attribute>元素被用来向元素添加属性
说明:当有相同的名称时<xsl:attribute>元素会替代当前的属性。
--------------------------------------------------------------------------------
语法
<xsl:attribute name="attributename" namespace="uri">
<!-- Content:template -->
</xsl:attribute>
属性
属性 值 说明
name attributename 必需的。指定属性的名称
namespace URI 可选。为属性定义命名空间。
例子 1
在picture元素里添加一个source属性:
<picture>
<xsl:attribute name="source"/>
</picture>
例子 2
在picture元素里添加一个source属性,并用"images/name"付值:
<picture>
<xsl:attribute name="source">
<xsl:value-of select="images/name" />
</xsl:attribute>
</picture>
<xsl:attribute-set> 元素
--------------------------------------------------------------------------------
定义与用法
<xsl:attribute-set>元素创建一个属性集。
<xsl:attribute-set>
说明:必须是<xsl:stylesheet> 或者 <xsl:transform>的子元素。
--------------------------------------------------------------------------------
语法
<xsl:attribute-set name="name" use-attribute-sets="name-list">
<!-- Content:xsl:attribute* -->
</xsl:attribute-set>
属性
属性 值 说明
name name 必需。用来指定attribute-set的名称。
use-attribute-sets name-list 可选。
例子 1
建立一个可以应用于任何输出元素的属性集:
<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>
<xsl:call-template>元素
定义与用法
<xsl:call-template>元素调用一个命名的template。
--------------------------------------------------------------------------------
语法
<xsl:call-template name="templatename">
<!-- Content:xsl:with-param* -->
</xsl:call-template>
属性
属性 值 说明
name templatename 必须。指定被调用的template的名字
例子 1
当发现car元素时,调用名为"description"的template
<xsl:template match="car">
<xsl:call-template name="description"/>
</xsl:template>
<xsl:choose>元素
--------------------------------------------------------------------------------
定义与用法
与<xsl:when> 和<xsl:otherwise>结合使用,表示多条件选择。
当<xsl:when>不为真时,<xsl:otherwise>的内容就被执行。
当<xsl:when>和<xsl:otherwise>都不为真时,什么都不执行。
说明:对于简单的条件选择,用<xsl:if>即可。
--------------------------------------------------------------------------------
语法
<xsl:choose><!-- Content:(xsl:when+,xsl:otherwise?) --></xsl:choose>
属性
无
例子 1
下面的代码展示了如何将价格高于10 的CD的artist列背景颜色设为粉红色
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<xsl:choose>
<xsl:when test="price > 10">
<td bgcolor="#ff00ff">
<xsl:value-of select="artist"/>
</td>
</xsl:when>
<xsl:otherwise>
<td><xsl:value-of select="artist"/></td>
</xsl:otherwise>
</xsl:choose>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template></xsl:stylesheet>
例子 2
声明一个名为"color"的变量。把当前元素color属性的值赋给"color"变量。如果当前元素没有color属性,则"color"变量的值将为"green":
<xsl:variable name="color">
<xsl:choose>
<xsl:when test="@color">
<xsl:value-of select="@color"/>
</xsl:when>
<xsl:otherwise>green</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:comment> 元素
<xsl:comment>元素
定义和用法
<xsl:comment>元素被用来在结果树中创建一个注释节点。
--------------------------------------------------------------------------------
语法
<xsl:comment><!-- Content:template --></xsl:comment>
属性
无
例子 1
<xsl:comment>This is a comment!</xsl:comment>
<xsl:copy> 元素
--------------------------------------------------------------------------------
定义与用法
<xsl:copy>创建当前节点的一份拷贝
说明:当前节点的命称空间被自动拷贝,但是子节点和当前节点的属性不会被自动拷贝!
--------------------------------------------------------------------------------
语法
<xsl:copy use-attribute-sets="name-list"> <!-- Content:template --></xsl:copy>
属性
属性 值 说明
use-attribute-sets name-list 可选。
例子 1
把message节点拷贝到输出文档中:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="message">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
<xsl:copy-of> 元素
定义与用法
<xsl:copy-of>元素创建当前节点的一份拷贝。
注意:命名空间节点,自节点和当前节点的属性都会被自动拷贝。
提示:这个元素能够向输出的不同位置插入多个相同节点的拷贝。
--------------------------------------------------------------------------------
语法
<xsl:copy-of select="expression"/>
属性
属性 值 说明
select expression 需要,用来指定要拷贝的部分
例子1
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="header">
<tr>
<th>Element</th>
<th>Description</th>
</tr>
</xsl:variable>
<xsl:template match="/">
<html>
<body>
<table>
<xsl:copy-of select="$header" />
<xsl:for-each select="reference/record">
<tr>
<xsl:if test="category='XML'">
<td><xsl:value-of select="element"/></td>
<td><xsl:value-of select="description"/></td>
</xsl:if>
</tr>
</xsl:for-each>
</table>
<br />
<table>
<xsl:copy-of select="$header" />
<xsl:for-each select="table/record">
<tr>
<xsl:if test="category='XSL'">
<td><xsl:value-of select="element"/></td>
<td><xsl:value-of select="description"/></td>
</xsl:if>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
<xsl:decimal-format>元素
--------------------------------------------------------------------------------
定义与用法
<xsl:decimal-format> 元素定义字符和符号使用format-number()函数来把数字转换为字符串。
每个国家使用不同的字符分割整数部分,以及整数分组符号。<xsl:decimal-format>元素让您可以自己定义它们。
用<xsl:decimal-format>元素您可以把特殊字符转为其他的符号。
这个元素是个顶级元素。
format-number()函数可以用name指定<xsl:decimal-format>元素。
--------------------------------------------------------------------------------
语法
<xsl:decimal-format
name="name"
decimal-separator="char"
grouping-separator="char"
infinity="string"
minus-sign="char"
NaN="string"
percent="char"
per-mille="char"
zero-digit="char"
digit="char"
pattern-separator="char"/>
属性
属性 值 说明
name name 可选。指定这个format的name
decimal-separator char 可选。指定小数点,默认是“.”
grouping-separator char 可选。指定千分割符,默认是“,”(比如2,000)
infinity string 可选。指定“无穷大”字符串,默认是“Infinity”
minus-sign char 可选。指定负数符号。默认是“-”
NaN string 可选。当值不是数字时,指定使用的字符串。默认是“NaN”
percent char 可选。指定百分号,默认是“%”
per-mille char 可选。指定千分号,默认是“‰”
zero-digit char 可选。指定零。默认是“0”
digit char 可选。指定字符用来指出需要使用数字的地方。默认是#(看下面的例子您会明白)
pattern-separator char 可选。指定字符用来在一个样式中分割正数和负数,默认是“;”
例子 1
下面的这个例子展示了如何格式化为欧洲流通样式。(注意在format-number()中的第三个变量运用了定义的<xsl:decimal-format>的名称):
(PS:欧洲使用这种标准?我也是才知道)
下面这个例子用“.”作为千分割符,用“;”作为小数点。
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:decimal-format name="euro" decimal-separator="," grouping-separator="."/>
<xsl:template match="/">
<xsl:value-of select="format-number(26825.8, '#.###,00', 'euro')"/>
</xsl:template>
</xsl:stylesheet>
输出: 26.825,80
<xsl:element>元素
--------------------------------------------------------------------------------
定义和用法
<xsl:element>元素用来创建一个元素到输出文档。
--------------------------------------------------------------------------------
语法
<xsl:element
name="name"
namespace="URI"
use-attribute-sets="namelist"> <!-- Content:template --></xsl:element>
属性
属性 值 说明
name name 必须。指定创建的元素的名称(元素名称可以动态赋予,比如<xsl:element name="{$country}" />)
namespace URI 可选。指定元素的名称空间(可以动态赋予,比如:<xsl:element name="{$country}" namespace = "{$someuri}"/>)
use-attribute-sets namelist 可选。指定添加的属性列表。
例子 1
创建一个名为“singer”的元素,此元素包含每一个artist元素的值。
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:for-each select="catalog/cd">
<xsl:element name="singer">
<xsl:value-of select="artist" />
</xsl:element>
<br />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
<xsl:fallback>元素
--------------------------------------------------------------------------------
定义和用法
The <xsl:fallback> 元素,当XSL 处理器不能处理某个XSL 元素时,<xsl:fallback>元素指定了一个替换代码去执行。
--------------------------------------------------------------------------------
语法
<xsl:fallback><!-- Content: template --></xsl:fallback>
属性
无
例子 1
这个例子假设处理器对<xsl:loop>元素不支持,它将会用<:xsl:for-each>元素替代。
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="catalog/cd">
<xsl:loop select="title">
<xsl:fallback>
<xsl:for-each select="title">
<xsl:value-of select="."/>
</xsl:for-each>
</xsl:fallback>
</xsl:loop>
</xsl:template>
</xsl:stylesheet>
<xsl:for-each> 元素
--------------------------------------------------------------------------------
定义与用法
<xsl:for-each>元素在每一个指定的节点集中循环。
--------------------------------------------------------------------------------
语法
<xsl:for-each select="expression">
<!-- Content:(xsl:sort*,template) -->
</xsl:for-each>
属性
属性 值 说明
select expression 必须。指定要处理的节点。
例子 1
在每个cd节点中循环,使用<xsl:value-of>把每一个cd节点中的title和artist的节点值写到输出中:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>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>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
例子 2
在每个cd节点中循环,使用<xsl:value-of>把每一个cd节点中的title和artist的节点值写到输出中(用artist作为排序条件):
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<xsl:sort select="artist"/>
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
<xsl:if>元素
--------------------------------------------------------------------------------
定义和用法
<xsl:if>元素包含一个样规,该样规当指定的条件为真时应用。
提示:可以使用<xsl:choose>与<xsl:when> , <xsl:otherwise>结合,表达多条件控制!
--------------------------------------------------------------------------------
语法
<xsl:if test="expression">
<!-- Content: template -->
</xsl:if>
属性
属性 值 说明
test expression 必须。指定要被检查的条件。
例子 1
选择CD中price的值大于10的。
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<xsl:if test="price > 10"> <!—注意 > 代表大于 -->
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:if>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
例子 2
展示每一个CD的title。
1、在每一个CD-title后插入“,”(条件:不是最后一个)
2、如果是倒数第二个插入“, and”
3、如果是最后一个插入“!”
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<p>Titles:
<xsl:for-each select="catalog/cd">
<xsl:value-of select="title"/>
<xsl:if test="position()!=last()">
<xsl:text>, </xsl:text>
</xsl:if>
<xsl:if test="position()=last()-1">
<xsl:text> and </xsl:text>
</xsl:if>
<xsl:if test="position()=last()">
<xsl:text>!</xsl:text>
</xsl:if>
</xsl:for-each>
</p>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
<xsl:import> 元素
--------------------------------------------------------------------------------
定义和用法
<xsl:import>元素是一个高级(原文是top-level)的元素用来把一个样式表的内容导入到另外一个。
说明:一个被导入的样式表比导入它的样式表的优先级要低。
说明:这个元素必须在<xsl:stylesheet> 或<xsl:transform>元素中作为第一个子节点出现。
说明:在Netscape 6中不支持import优先级规则,所以这个元素在Netscape 6中与<xsl:include>是一样的。
--------------------------------------------------------------------------------
语法
<xsl:import href="URI"/> _fcksavedurl=""URI"/>"
属性
属性 值 说明
href URI 必须。指定要被导入的样式表的URI
例子 1
假设你有一个称为"cdcatalog_ex3.xsl"的样式表。
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<tr>
<td><xsl:value-of select="catalog/cd/title"/></td>
<td><xsl:value-of select="catalog/cd/artist"/></td>
</tr>
</table>
</body>
</html>
</xsl:template></xsl:stylesheet>
第二个称为"cdcatalog_import.xsl"的样式表导入"cdcatalog_ex3.xsl":
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="cdcatalog_ex3.xsl"/> _fcksavedurl=""cdcatalog_ex3.xsl"/>"
<xsl:template match="/">
<xsl:apply-imports/>
</xsl:template>
</xsl:stylesheet>
说明:这个例子不能运行在Netscape 6中,因为它不支持<xsl:apply-imports> 元素。
<xsl:include> 元素
--------------------------------------------------------------------------------
定义和用法
<xsl:include>元素是一个高级(原文是top-level)的元素用来把一个样式表的内容导入到另外一个。
说明:Included的样式表与including的样式表有相同的优先级。
说明:这个元素必须作为<xsl:stylesheet> 或 <xsl:transform>的一个子节点出现。
--------------------------------------------------------------------------------
语法
<xsl:include href="URI"/>
属性
属性 值 说明
href URI 必须。指定include的样式表的URI。
<xsl:key> 元素
--------------------------------------------------------------------------------
定义与用法
<xsl:key>元素是一个高级(原文是top-level)的元素,用来声明一个被key()函数使用的key
说明:一个key不一定是唯一的!
--------------------------------------------------------------------------------
语法
<xsl:key name="name" match="pattern" use="expression"/>
属性
属性 值 说明
name name 必须。指定key的名称。
match pattern 必须。定义key将应用的节点。
use expression 必须。Key对于每一个节点的值。
例子 1
假设你有一个称为"persons.xml"的XML文件:
<persons>
<person name="Tarzan" id="050676"/>
<person name="Donald" id="070754"/>
<person name="Dolly" id="231256"/>
</persons>
你可以在一个XSL文件中这样定义一个key:
<xsl:key name="preg" match="person" use="@id"/>
查找id="050676"的person。
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="preg" match="person" use="@id"/>
<xsl:template match="/">
<html>
<body>
<xsl:for-each select="key('preg','050676')">
<p>
Id: <xsl:value-of select="@id"/><br />
Name: <xsl:value-of select="@name"/>
</p>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
<xsl:message> 元素
--------------------------------------------------------------------------------
定义与用法
<xsl:message>元素向输出发送一条消息。这个元素首先被用来报告错误。
这个元素能够包含几乎所有其它的XSL元素(比如:<xsl:text>, <xsl:value-of>等)。
当一个错误发生时,Terminate属性为您提供选择是继续执行还是退出。
--------------------------------------------------------------------------------
语法
<xsl:message terminate="yes|no">
<!-- Content:template -->
</xsl:message>
属性
属性 值 说明
terminate yes no 可选。当消息写到输出后“yes”将终止执行,而“no”继续执行。默认是“no”。
例子 1
检查artist是否是一个空串。如果是,我们结束XSL处理并显示一条消息:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<xsl:for-each select="catalog/cd">
<p>Title: <xsl:value-of select="title"/><br />
Artist:
<xsl:if test="artist=''">
<xsl:message terminate="yes">
Error: Artist is an empty string!
</xsl:message>
</xsl:if>
<xsl:value-of select="artist"/>
</p>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
<xsl:namespace-alias> 元素
--------------------------------------------------------------------------------
定义与用法
<xsl:namespace-alias>元素用来在输出中用不同的名称空间替代样式表中原来的名称空间。
说明:<xsl:namespace-alias>是一个高级的元素,必须是<xsl:stylesheet>或者<xsl:transform>的子节点。
--------------------------------------------------------------------------------
语法
<xsl:namespace-alias
stylesheet-prefix="prefix|#default"
result-prefix="prefix|"#default"/>
属性
属性 值 说明
stylesheet-prefix prefix #default 必须。指定您想要改变的名称空间。
result-prefix prefix #default 必须. 指定输出想要的名称空间。
例子 1
wxsl前缀在输出中被转换为xsl前缀。
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:wxsl="http://www.w3schools.com/w3style.xsl">
<xsl:namespace-alias stylesheet-prefix="wxsl" result-prefix="xsl"/>
<xsl:template match="/">
<wxsl:stylesheet>
<xsl:apply-templates/>
</wxsl:stylesheet>
</xsl:template>
</xsl:stylesheet>
<xsl:number> 元素
--------------------------------------------------------------------------------
定义与用法
<xsl:number>元素被用来确定当前节点中的整数位置。也被用来格式化一个数字。
--------------------------------------------------------------------------------
语法
<xsl:number
count="expression"
level="single|multiple|any"
from="expression"
value="expression"
format="formatstring"
lang="languagecode"
letter-value="alphabetic|traditional"
grouping-separator="character"
grouping-size="number"/>
属性
Attribute Value Description
count expression 可选. An XPath expression that specifies what nodes areto be counted
一个XPath表达式用来指定什么样的节点被计数。
level single multiple any
可选。对数字串产生像目录树一样的分级。
&S226;single (默认)
&S226;multiple (多级)
&S226;any (Netscape 6不支持)
from expression 可选。用一个XPath表达式指定从哪里开始计数。
value expression 可选。由用户指定一个数字来产生数字序列。
format formatstring
可选。定义了输出的数字的样式。可以是下述之一:
&S226;format="1" results in 1 2 3 . .
&S226;format="01" results in 01 02 03 (not supportedby Netscape 6)
&S226;format="a" results in a b c . . (not supported byNetscape 6)
&S226;format="A" results in A B C. . (not supported byNetscape 6)
&S226;format="i" results in i ii iii iv . . (not supportedby Netscape 6)
&S226;format="I" results in I II III IV . . (not supported by Netscape 6)
lang languagecode 可选。指定语言的字母表。(ps:有疑问)
Netscape 6不支持。
letter-value alphabetic traditional 可选。指定数字化时是用字母表还是传统。默认是字母表。(ps:有疑问)
grouping-separator character 可选,指定数字组的分割符,默认是”,”
grouping-size number 可选。指定多少个数字为一组,使用一个分割符,默认是3
例子1
<xsl:number value="250000" grouping-separator="."/>
输出:
250.000
例子2
<xsl:number value="250000" grouping-size="2"/>
输出:
25,00,00
例子3
<xsl:number value="12" grouping-size="1"
grouping-separator="#" format="I"/>
输出:
X#I#I
例子 4
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/">
<html>
<body>
<p>
<xsl:for-each select="catalog/cd">
<xsl:number value="position()" format="1" />
<xsl:value-of select="title" /><br />
</xsl:for-each>
</p>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
<xsl:otherwise> 元素
--------------------------------------------------------------------------------
定义与用法
<xsl:otherwise>元素为<xsl:choose>元素指定一个默认的动作。这个动作当<xsl:when>的条件不满足的时候发生。
--------------------------------------------------------------------------------
语法
<xsl:otherwise>
<!-- Content:template -->
</xsl:otherwise>
属性
无
例子 1
下面这段代码将把cd的price高于10的artist列的背景色设为粉红色,OTHERWISE只是打印artist的name:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<xsl:choose>
<xsl:when test="price>'10'">
<td bgcolor="#ff00ff">
<xsl:value-of select="artist"/></td>
</xsl:when>
<xsl:otherwise>
<td><xsl:value-of select="artist"/></td>
</xsl:otherwise>
</xsl:choose>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template></xsl:stylesheet>
例子 2
声明一个名为"color"的变量。设置变量的值为当前元素的color属性的值。如果当前元素没有color属性,"color"的值将为"green":
<xsl:variable name="color">
<xsl:choose>
<xsl:when test="@color">
<xsl:value-of select="@color"/>
</xsl:when>
<xsl:otherwise>green</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:output> 元素
--------------------------------------------------------------------------------
定义与用法
<xsl:output>元素定义了输出文档的格式:
说明:<xsl:output>是一个高级的(top level)元素,必须作为<xsl:stylesheet>或<xsl:transform>的子节点出现:
--------------------------------------------------------------------------------
语法
<xsl:output
method="xml|html|text|name"
version="string"
encoding="string"
omit-xml-declaration="yes|no"
standalone="yes|no"
doctype-public="string"
doctype-system="string"
cdata-section-elements="namelist"
indent="yes|no"
media-type="string"/>
属性
属性 值 说明
method xml html text name 可选。定义了输出的格式。默认是XML(如果根节点的第一个子节点是<html>并且没有其他高优先级的文本节点,那么默认是HTML)
Netscape 6只支持"html" 和 "xml"
version string 可选。设置版本。当用method="html" 或者 method="xml"时才用到。
encoding string 可选。设置输出的编码。
omit-xml-declaration yes no 可选。如果为"yes",则XML声明(<?xml...?>)在输出中会被省略,否则就会加入。默认是"no"
standalone yes no 可选。"yes"时standalone要在输出中声明,"no"时不必在输出中声明。默认是"no"。
Netscape 6不支持
doctype-public string 可选。设置输出的public DOCTYPE值。
doctype-system string 可选。设置输出的system DOCTYPE。
cdata-section-elements namelist 可选。用空格来分割内容为字符数据类型的元素。(ps:有疑问)
indent yes no 可选。缩进选项。"yes"时要根据结构缩进,"no"时不缩进。默认是"yes"
Netscape 6不支持
media-type string 可选。定义输出的MIME类型。默认是"text/xml"
Netscape 6不支持
例子 1
下面这段代码以XML格式输出,xml版本是1.0,编码是"ISO-8859-1",并且为了易读文档要缩进。
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0"
encoding="iso-8859-1" indent="yes"/>......</xsl:stylesheet>
例子 2
下面这段代码以HTML格式输出,HTML版本是4.0,编码是"ISO-8859-1",并且为了易读文档要缩进。
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:output method="html" version="4.0"
encoding="iso-8859-1" indent="yes"/>......</xsl:stylesheet>
<xsl:param> 元素
--------------------------------------------------------------------------------
定义与用法
<xsl:param>元素被用来声明一个局部或者全局的参数。
说明:如果声明的是一个高级(top-level)的元素那么参数是全局的,
如果在一个样规中声明那么是局部的。
--------------------------------------------------------------------------------
语法
<xsl:param
name="name"
select="expression"><!-- Content:template --></xsl:param>
属性
属性 值 说明
name name 必须。指定参数的名称。
select expression 可选。指定一个XPath表达式作为参数的默认值。
例子 1
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="xx">
<html>
<body>
<xsl:call-template name="show_title">
<xsl:with-param name="title" />
</xsl:call-template>
</body>
</html>
</xsl:variable>
<xsl:template name="show_title" match="/">
<xsl:param name="title" />
<xsl:for-each select="catalog/cd">
<p>Title: <xsl:value-of select="$title" /></p>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
<xsl:preserve-space> 与 <xsl:strip-space> 元素
--------------------------------------------------------------------------------
定义与用法
<xsl:preserve-space>元素用来定义必须保留空白空间的元素。
<xsl:strip-space>元素用来定义必须移除空白空间的元素。
说明:因为保留空白空间是默认设置,所以只有当<xsl:strip-space>元素被使用时才有必要使用<xsl:preserve-space>元素。
说明:<xsl:preserve-space>元素和<xsl:strip-space>元素是高级(top-level)元素。
--------------------------------------------------------------------------------
语法
<xsl:preserve-space elements="list-of-element-names"/>
<xsl:strip-space elements="list-of-element-names"/>
属性
属性 值 说明
elements list-of-element-names 必须。对列表中的元素加上/除去白色空间。
说明:列表可以包含“*”和“prefix:*”这样所有的元素或者一个特定的命名空间所有的元素能够加入。
例子 1
下面的这个例子,title 和 artist 元素保留白色空间,country, company, price, 和 year 元素移除白色空间:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="country company price year" />
<xsl:preserve-space elements="title artist" />
<xsl:template match="/">
<html>
<body>
<xsl:for-each select="catalog/cd">
<p>
<xsl:value-of select="title" /><br />
<xsl:value-of select="artist" /><br />
<xsl:value-of select="country" /><br />
<xsl:value-of select="company" /><br />
<xsl:value-of select="price" /><br />
<xsl:value-of select="year" />
</p>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
<xsl:processing-instruction> 元素
--------------------------------------------------------------------------------
定义与用法
<xsl:processing-instruction>元素向输出写一条执行指令。
--------------------------------------------------------------------------------
语法
<xsl:processing-instruction name="process-name">
<!-- Content:template -->
</xsl:processing-instruction>
属性
属性 值 说明
name process-name 必须。指定执行指令的名称。
例子 1
下面的代码:
<xsl:processing-instruction name="xml-stylesheet">
href="style.css" type="text/css"
</xsl:processing-instruction>
生成如下的标记:
<?xml-stylesheet href="style.css" type="text/css"?>
<xsl:sort> 元素
--------------------------------------------------------------------------------
定义与用法
<xsl:sort>元素被用来对输出排序。
说明:<xsl:sort>通常与<xsl:for-each> 或者 <xsl:apply-templates>一起使用。
--------------------------------------------------------------------------------
语法
<xsl:sort
select="expression"
lang="language-code"
data-type="text|number|qname"
order="ascending|descending"
case-order="upper-first|lower-first"/>
属性
属性 值 说明
select XPath-expression 可选。指定根据哪一个node/node-set为关键字来排序。
lang language-code 可选。指定用哪一种语言来排序。
data-type text number qname 可选。指定数据用来排序的数据类型。默认是“text”
order ascending descending 可选。指定排序方式。默认是升序。
case-order upper-first lower-first 可选。指定是按大写字母先排序还是按小写字母先排序。
例子 1
The example below will sort the output by artist:
下面例子的输出会以artist为关键字排序。
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<xsl:sort select="artist"/>
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
<xsl:stylesheet> 与 <xsl:transform> 元素
--------------------------------------------------------------------------------
定义与用法
<xsl:stylesheet>与<xsl:transform>元素是两个意思完全一样的元素。都被用来定义样式表的根元素。
--------------------------------------------------------------------------------
语法
<xsl:stylesheet id="name" version="version" extension-element-prefixes="list"
exclude-result-prefixes="list">
<!-- Content:(<xsl:import>*,top-level-elements) -->
</xsl:stylesheet>
<xsl:transform id="name" version="version" extension-element-prefixes="list"
exclude-result-prefixes="list">
<!-- Content:(<xsl:import>*,top-level-elements) -->
</xsl:transform>
属性
属性 值 说明
version version 必须。指定样式表的XSLT版本
extension-element-prefixes list 可选。
扩展元素的命名空间前缀(以空格分割)
Netscape 6不支持该属性
exclude-result-prefixes list 可选。
不因该在输出中出现的扩展元素的命名空间前缀(以空格分割)
id name 可选。样式表的唯一id
Netscape 6不支持该属性
例子 1
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">........</xsl:stylesheet>
例子 2
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:transform version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">........</xsl:transform>
<xsl:template> 元素
--------------------------------------------------------------------------------
定义与用法
The <xsl:template> element contains rules to apply when a specified node is matched.
<xsl:template>元素包含一些对匹配节点有用的规则。
match属性用来匹配XML节点。也可以匹配全部XML文档(比如match="/")
说明: <xsl:template>是一个高级(top-level)元素。
--------------------------------------------------------------------------------
语法
<xsl:template name="name" match="pattern" mode="mode" priority="number">
<!-- Content:(<xsl:param>*,template) -->
</xsl:template>
Attributes
属性 值 说明
name name 可选。指定该template的名称。
说明:如果这个属性被省略了,一定会有match属性。
match pattern 可选。template匹配的模式
说明:如果这个属性被省略了,一定会有name属性
mode mode 可选。
指定这个template的模式
priority number 可选。
用一个数字指出了template的数字的优先级
例子
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="cd">
<p>
<xsl:apply-templates select="title"/>
<xsl:apply-templates select="artist"/>
</p>
</xsl:template>
<xsl:template match="title">
Title: <span style="color:#ff0000">
<xsl:value-of select="."/></span>
<br />
</xsl:template>
<xsl:template match="artist">
Artist: <span style="color:#00ff00">
<xsl:value-of select="."/></span>
<br />
</xsl:template>
</xsl:stylesheet>
<xsl:text> 元素
--------------------------------------------------------------------------------
定义与用法
<xsl:text> 元素用来向输出写一段文字。
提示:这个元素可以包含文字,实体引用和任何非xml元素的数据。
--------------------------------------------------------------------------------
语法
<xsl:text disable-output-escaping="yes|no">
<!-- Content:#PCDATA -->
</xsl:text>
属性
属性 值 说明
disable-output-escaping yes no 可选。当为"yes"时,特殊的字符(比如"<")照原样输出,当为"no"时,输出为"<"。默认是"no"。
这个属性在Netscape 6中不被支持
例子 1
展示每一个CD的title。
1、在每一个CD-title后插入“,”(条件:不是最后一个)
2、如果是倒数第二个插入“, and”
3、如果是最后一个插入“!”
显示每一个CD的标题。
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<p>Titles:
<xsl:for-each select="catalog/cd">
<xsl:value-of select="title"/>
<xsl:if test="position() < last()-1">
<xsl:text>, </xsl:text>
</xsl:if>
<xsl:if test="position()=last()-1">
<xsl:text>, and </xsl:text>
</xsl:if>
<xsl:if test="position()=last()">
<xsl:text>!</xsl:text>
</xsl:if>
</xsl:for-each>
</p>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
<xsl:value-of> 元素
--------------------------------------------------------------------------------
定义与用法
<xsl:value-of>元素取出选择的节点的值。
<xsl:value-of>元素可以被用来取出XML元素的值,并输出。
说明:value使用XPath表达式取值,使用像文件系统那样的方法用(/)选择子文件夹。
--------------------------------------------------------------------------------
语法
<xsl:value-of select="expression" disable-output-escaping="yes|no"/>
属性
属性 值 说明
select expression 必须。一个XPath表达式用来指定从哪一个节点/属性来取值。
disable-output-escaping yes no 可选。当为"yes"时,特殊的字符(比如"<")照原样输出,当为"no"时,输出为"<"。默认是"no"。
例子 1
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<tr>
<td><xsl:value-of select="catalog/cd/title"/></td>
<td><xsl:value-of select="catalog/cd/artist"/></td>
</tr>
</table>
</body>
</html>
</xsl:template></xsl:stylesheet>
例子 2
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>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>
</body>
</html>
</xsl:template></xsl:stylesheet>
<xsl:variable> 元素
--------------------------------------------------------------------------------
定义与用法
<xsl:variable>元素被用来声明一个局部或者全局的变量。
说明:当声明为高级(top-level)元素时,变量是全局的,当在一个template中声明时,作为局部变量。
说明:一旦您设置了一个变量的值,您就不能修改这个值!
提示:您可以通过增加<xsl:variable>的内容或者用select属性来设置变量值!
--------------------------------------------------------------------------------
语法
<xsl:variable name="name" select="expression">
<!-- Content:template -->
</xsl:variable>
属性
属性 值 说明
name name 必须。指定变量名称
select expression 可选。指定变量的值
例子 1
如果select属性被设置了,那么<xsl:variable>元素就不可以包含任何内容。如果select属性包含字符串,则在设置时必须用引号。
下面的两行示例代码分别给变量"color"赋值为"red"。
<xsl:variable name="color" select="'red'" />
<xsl:variable name="color" select='"red"' />
例子 2
如果<xsl:variable>元素仅有name属性,元素间没有内容,那么就定义了一个空字符串变量。
<xsl:variable name="j" />
例子 3
下面的这个例子用<xsl:variable>元素将
<tr>
<th>title</th>
<th>year</th>
</tr>
作为变量传递给输出:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="header">
<tr>
<th>title</th>
<th>year</th>
</tr>
</xsl:variable>
<xsl:template match="/">
<html>
<body>
<table>
<xsl:copy-of select="$header"/>
<xsl:text>
year = 1982
</xsl:text>
<xsl:for-each select="catalog/cd">
<xsl:if test="year = 1982">
<tr>
<td>
<xsl:value-of select="title"/>
</td>
<td>
<xsl:value-of select="year"/>
</td>
</tr>
</xsl:if>
</xsl:for-each>
</table>
<br/>
<table>
<xsl:copy-of select="$header"/>
<xsl:text>
year = 1985
</xsl:text>
<xsl:for-each select="catalog/cd">
<xsl:if test="year = 1985">
<tr>
<td>
<xsl:value-of select="title"/>
</td>
<td>
<xsl:value-of select="year"/>
</td>
</tr>
</xsl:if>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
<xsl:when> 元素
--------------------------------------------------------------------------------
定义和用法
<xsl:when>元素为<xsl:choose>元素指定一个动作。当符合<xsl:when>元素的条件时,动作就被激活。
说明:<xsl:when>元素与<xsl:choose> 和 <xsl:otherwise>元素一同使用,来表达多条件选择。
--------------------------------------------------------------------------------
语法
<xsl:when test="boolean-expression">
<!-- Content: template -->
</xsl:when>
属性
属性 值 说明
test boolean-expression 必须。指定执行条件。
例子 1
下面的这段代码将把cd /price高于10 artist列的背景色设为粉红色。
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<xsl:choose>
<xsl:when test="price>'10'">
<td bgcolor="#ff00ff">
<xsl:value-of select="artist"/></td>
</xsl:when>
<xsl:otherwise>
<td><xsl:value-of select="artist"/></td>
</xsl:otherwise>
</xsl:choose>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template></xsl:stylesheet>
例子 2
声明一个名为"color"的变量。把当前元素color属性的值赋给"color"变量。如果当前元素没有color属性,则"color"变量的值将为"green":
<xsl:variable name="color">
<xsl:choose>
<xsl:when test="@color">
<xsl:value-of select="@color"/>
</xsl:when>
<xsl:otherwise>green</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:with-param> 元素
--------------------------------------------------------------------------------
定义与用法
<xsl:with-param>元素向模板传递的参数的值。
说明:<xsl:with-param>元素的name属性的值必须与一个<xsl:param>元素的name相匹配(否则<xsl:with-param>元素将被忽略)。
说明:<xsl:with-param>元素在<xsl:apply-templates>和<xsl:call-template>之内使用。
提示:您可以通过两种方式向<xsl:with-param>元素赋值
1、用select属性。
2、在<xsl:with-param name="A">与</xsl:with-param>元素中写。
--------------------------------------------------------------------------------
语法
<xsl:with-param name="name" select="expression">
<!-- Content:template -->
</xsl:with-param>
属性
属性 值 说明
name name 必须。指定参数的名字
select expression 可选。 An XPath expression that defines the value of the parameter
一个XPath表达式定义了参数的值
例子 1
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:call-template name="show_title">
<xsl:with-param name="title" select="catalog/cd/title"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="show_title">
<xsl:param name="title"/>
<xsl:for-each select="catalog/cd">
<p>
Title: <xsl:value-of select="$title"/>
</p>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
例子2
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:call-template name="print">
<xsl:with-param name="A">11</xsl:with-param>
<xsl:with-param name="B">33</xsl:with-param>
</xsl:call-template>
<xsl:call-template name="print">
<xsl:with-param name="A">55</xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template name="print">
<xsl:param name="A"/>
<xsl:param name="B">111</xsl:param>
<xsl:text>
</xsl:text>
<xsl:value-of select="$A"/>
<xsl:text> + </xsl:text>
<xsl:value-of select="$B"/>
<xsl:text> = </xsl:text>
<xsl:value-of select="$A+$B"/>
</xsl:template>
</xsl:stylesheet>
这个例子的输出结果为
11 + 33 = 44 55 + 111 = 166