课外天地 李树青学习天地数据库系统原理课件 → [推荐]XML学习资料之四——XSL


  共有18080人关注过本帖树形打印复制链接

主题:[推荐]XML学习资料之四——XSL

帅哥哟,离线,有人找我吗?
admin
  1楼 博客 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 管理员
等级:管理员 帖子:1938 积分:26572 威望:0 精华:34 注册:2003/12/30 16:34:32
[推荐]XML学习资料之四——XSL  发帖心情 Post By:2008/2/20 15:21:10 [只看该作者]

1 CSS
CSS是Cascading Style Sheets的缩写,可以为HTML网页提供样式信息并控制HTML网页的显示格式。

1、1 简单使用
有CSS文件为:
students
{display:block;
margin:3em;
width:27em;
height:30em;
border-style:groove;
border-width:5px;
border-color:red;
padding:5em;
background-image:url(lsq.jpg);
background-repeat:no-repeat;
background-position:bottom;}

student
{display:block;
text-align:center;}

相应使用CSS的XML文件,如:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="stu1.css" ?>
<students>
<student>
  <number>000001</number>
  <name>黎明</name>
</student>
<student>
  <number>000002</number>
  <name>赵怡春</name>
</student>
<student>
  <number>000003</number>
  <name>张富平</name>
</student>
<student>
  <number>000004</number>
  <name>白丽</name>
</student>
<student>
  <number>000005</number>
  <name>牛玉德</name>
</student>
<student>
  <number>000006</number>
  <name>姚华</name>
</student>
<student>
  <number>000007</number>
  <name>李南</name>
</student>
</students>

如果引用的CSS文件不存在,则会显示默认样式,如:
<?xml-stylesheet type="text/css" href="" ?>

也可以使用其他的CSS文件来替换样式,如:
students
{ margin-left:2in;
  color:navy;
  font-family:Arial;
  font-size:30pt;
  background-color:white;
  display:block
}

student
{ color:yellow;
  font-family:Arial;
  font-size:20pt;
  background-color:blue;
  display:block
}

1、2 CSS的特点
它的好处:
1)格式与结构分离
2)准确控制页面布局
3)样式作用的元素下所有元素内容都受影响,除非自己定义新的样式

缺点:
1)不能选择元素,根元素下的所有元素内容都会显示
2)只能把样式和已经出现在文档中的内容相连接
3)不能显示属性的内容
4)不能重新编排各个元素的顺序和重组
5)不能对中文标签字符进行样式定义

2 XSL
XSL是eXtensible Stylesheet Language的缩写,用于对XML文件的显示进行控制,功能强于CSS。XSL文件本身的格式遵守XML语言规范

2、1 简单使用
所使用的XML文件为:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="stu.xsl" ?>
<students>
<student>
  <number>000001</number>
  <name>黎明</name>
</student>
</students>

相应的XSL文件为:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:template match="students">
<xsl:value-of select="*"/>
</xsl:template>
</xsl:stylesheet>

进一步修改XSL文件,使之产生黑体字效果,如:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:template match="students">
<b>
<xsl:value-of select="*"/>
</b>
</xsl:template>
</xsl:stylesheet>

再次结合更多的HTML标签来增强XSL文件的显示效果,如:
<?xml version="1.0" encoding="gb2312" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<html>
<head>
<title>学生信息网页</title>
</head>
<body>
<center><img src="lsq.jpg"/></center>
<center><h1>学生信息</h1></center>
<table border="2" align="center">
<tr>
<td>学号</td><td>姓名</td>
</tr>
<tr>
<td><xsl:value-of select="students/student/number" /></td>
<td><xsl:value-of select="students/student/name" /></td>
</tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

注意:虽然XSL文件可以引入HTML标签,但是此时的HTML标签必须遵循XML的严格语法规则

也可以再次结合CSS来增强XSL文件的显示效果,如:
<?xml version="1.0" encoding="gb2312" ?>
<xsl:stylesheet language="vbscript"  xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template >
<html><head>
<title>学生信息网页</title>
<style>
.name
{color:yellow;
background:#666666;
display:block;
font-size:large;
font-weight:bold;}
.content
{color:black;
background:#cccccc;
display:block;}
</style>
</head>
<body>
<center><h1 style="color:red">学生信息</h1></center>
<table align="center">
<tr><td class="name">学号</td><td class="name"><xsl:value-of select="students/student/number" /></td>
</tr><tr>
<td class="content">姓名</td>
<td class="content"><xsl:value-of select="students/student/name" /></td>
</tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

2、2 XSL的数据处理元素
2、2、1 xsl:stylesheet元素
代表XSL样式表的根元素,里面含有排版模板template,如果template里面没有定义任何内容,将导致XML文件什么也不显示
XSL的基本结构为:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:template match="students">
</xsl:template>
</xsl:stylesheet>

2、2、2 xsl:value-of元素
用于选择要显示的元素内容,利用此元素可以将元素或者属性的值结合到排版模板中。

它本身是个空元素,利用select属性指定显示的内容,其值必须是完整的路径,如果不是从XML根元素开始的路径,那就是依据上层元素对应的相对路径。要选择属性,还要加上“@”符号。

这个元素所选择的XML文档元素才会显示出来,而且显示的次序只依赖于XSL文件中xsl:value-of元素出现的位置,与XML文档中的元素位置无关

如XSL文件为:
<?xml version="1.0" encoding="gb2312" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<html>
<head>
<title>学生信息网页</title>
</head>
<body>
<center><img src="lsq.jpg"/></center>
<center><h1>学生信息</h1></center>
<table border="2" align="center">
<tr>
<td>学号</td><td>性别</td><td>姓名</td><td>姓</td><td>名</td>
</tr>
<tr>
<td><xsl:value-of select="students/student/number" /></td>
<td><xsl:value-of select="students/student/name/@sex" /></td>
<td><xsl:value-of select="students/student/name" /></td>
<td><xsl:value-of select="students/student/name/fname" /></td>
<td><xsl:value-of select="students/student/name/lname" /></td>
</tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

相应的XML文件为:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="stu.xsl" ?>
<students>
<student>
  <number>000001</number>
  <name sex="male">
   <fname>黎</fname>
   <lname>明</lname>
  </name>
</student>
</students>

2、2、3 xsl:for-each元素
用于遍历多条XML记录,如果只是使用xsl:value-of元素只能显示第一条记录
此元素需要指定显示元素的上层元素,再利用xsl:value-of元素得到相应的子元素

如XSL文件为:
<?xml version="1.0" encoding="gb2312" ?>
<xsl:stylesheet language="vbscript"  xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template >
<html><head>
<title>学生信息网页</title>
<style>
.name
{color:yellow;
background:#666666;
display:block;
font-size:large;
font-weight:bold;}
.content
{color:black;
background:#cccccc;
display:block;}
</style>
</head>
<body>
<center><h1 style="color:red">学生信息</h1></center>
<table align="center">
<xsl:for-each select="students/student" order-by="name">
<tr><td class="name">学号</td><td class="name"><xsl:value-of select="number" /></td></tr>
<tr><td class="content">姓名</td><td class="content"><xsl:value-of select="name" /></td></tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

注意:如果要降序排序,写法为:<xsl:for-each select="students/student" order-by="-name">

另外一个版本的XSL文件为:
<?xml version="1.0" encoding="gb2312" ?>
<xsl:stylesheet language="vbscript"  xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template >
<html><head>
<title>学生信息网页</title>
<style>
.name
{color:yellow;
background:#666666;
display:block;
font-size:large;
font-weight:bold;}
.content
{color:black;
background:#cccccc;
display:block;}
</style>
</head>
<body>
<center><h1 style="color:red">学生信息</h1></center>
<table align="center">
<tr><td class="name">学号</td><td class="name">姓名</td></tr>
<xsl:for-each select="students/student" order-by="name">
<tr><td class="content"><xsl:value-of select="number" /></td><td class="content"><xsl:value-of select="name" /></td></tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

相应的XML文件为:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="stu.xsl" ?>
<students>
<student>
  <number>000001</number>
  <name>黎明</name>
</student>
<student>
  <number>000002</number>
  <name>赵怡春</name>
</student>
<student>
  <number>000003</number>
  <name>张富平</name>
</student>
<student>
  <number>000004</number>
  <name>白丽</name>
</student>
<student>
  <number>000005</number>
  <name>牛玉德</name>
</student>
<student>
  <number>000006</number>
  <name>姚华</name>
</student>
<student>
  <number>000007</number>
  <name>李南</name>
</student>
</students>

2、2、4 xsl:copy元素
用于将xsl:value-of获取的文本复制到客户端输出,直接将XML文件中的文本数据显示出来

如XSL文件为:
<?xml version="1.0" encoding="GB2312"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template>
<xsl:copy><!--显示通过xsl:value-of 所获得的数据-->
<xsl:value-of />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

也可以写成:
<?xml version="1.0" encoding="GB2312"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template>
<xsl:copy><!--显示通过xsl:value-of 所获得的数据-->
<xsl:value-of select="*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

也可以写成(但是格式不完全一样,copy元素中的内容是每个子元素独立的,而不使用copy的方式是以每个除根元素外的一级元素为单位独立的):
<?xml version="1.0" encoding="GB2312"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template>
<!--显示通过xsl:value-of 所获得的数据-->
<xsl:value-of/>
</xsl:template>
</xsl:stylesheet>

相应的XML文件为:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="stu.xsl" ?>
<students>
<student>
  <number>000001</number>
  <name>黎明</name>
</student>
<student>
  <number>000002</number>
  <name>赵怡春</name>
</student>
<student>
  <number>000003</number>
  <name>张富平</name>
</student>
<student>
  <number>000004</number>
  <name>白丽</name>
</student>
<student>
  <number>000005</number>
  <name>牛玉德</name>
</student>
<student>
  <number>000006</number>
  <name>姚华</name>
</student>
<student>
  <number>000007</number>
  <name>李南</name>
</student>
</students>

也可以循环所有元素:
<?xml version="1.0" encoding="GB2312"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<!--显示通过xsl:value-of 所获得的数据-->
<xsl:copy>
<xsl:for-each select="students/student" order-by="name">
<xsl:value-of select="number" /><xsl:value-of select="name" />
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

2、2、5 xsl:attribute元素
为输出文件的HTML控制标签设定属性和属性值,相应的属性值可以从XML文档中获取

如XSL文件为:
<?xml version="1.0" encoding="gb2312" ?>
<xsl:stylesheet language="vbscript"  xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template >
<html><head>
<title>学生信息网页</title>
<style>
.name
{color:yellow;
background:#666666;
display:block;
font-size:large;
font-weight:bold;}
.content
{color:black;
background:#cccccc;
display:block;}
</style>
</head>
<body>
<center>
<img>
<xsl:attribute name="src">
<xsl:value-of select="students/pic">
</xsl:value-of>
</xsl:attribute>
</img>
</center>
<center><h1 style="color:red">学生信息</h1></center>
<table align="center">
<tr><td class="name">学号</td><td class="name">姓名</td></tr>
<xsl:for-each select="students/student" order-by="name">
<tr><td class="content"><xsl:value-of select="number" /></td><td class="content"><xsl:value-of select="name" /></td></tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

相应的XML文件为:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="stu.xsl" ?>
<students>
<student>
  <number>000001</number>
  <name>黎明</name>
</student>
<student>
  <number>000002</number>
  <name>赵怡春</name>
</student>
<student>
  <number>000003</number>
  <name>张富平</name>
</student>
<student>
  <number>000004</number>
  <name>白丽</name>
</student>
<student>
  <number>000005</number>
  <name>牛玉德</name>
</student>
<student>
  <number>000006</number>
  <name>姚华</name>
</student>
<student>
  <number>000007</number>
  <name>李南</name>
</student>
<pic>lsq.jpg</pic>
</students>

2、2、6 xsl:element
为输出文件生成标签,相应的内容可以从XML文档中获取

如XSL文件为:
<?xml version="1.0" encoding="gb2312" ?>
<xsl:stylesheet language="vbscript"  xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template >
<xsl:element name="p">
<xsl:value-of select="students/student/name"/>
</xsl:element>
<xsl:element name="title">
学生信息网页
</xsl:element>
<html><head>
<style>
.name
{color:yellow;
background:#666666;
display:block;
font-size:large;
font-weight:bold;}
.content
{color:black;
background:#cccccc;
display:block;}
</style>
</head>
<body>
<center>
<img>
<xsl:attribute name="src">
<xsl:value-of select="students/pic">
</xsl:value-of>
</xsl:attribute>
</img>
</center>
<center><h1 style="color:red">学生信息</h1></center>
<table align="center">
<tr><td class="name">学号</td><td class="name">姓名</td></tr>
<xsl:for-each select="students/student" order-by="name">
<tr><td class="content"><xsl:value-of select="number" /></td><td class="content"><xsl:value-of select="name" /></td></tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

相应的XML文件不变

2、3 模板的使用
2、3、1 xsl:template
用于设置显示的样式,match属性用于指定应用这个样式的元素名称

如XSL文件为
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:template match="ClassI">
<font color="red">
<xsl:for-each select="student">
<xsl:value-of select="number"/>
<xsl:value-of select="name"/>
</xsl:for-each>
</font>
</xsl:template>
<xsl:template match="ClassII">
<font color="blue">
<xsl:for-each select="student">
<xsl:value-of select="number"/>
<xsl:value-of select="name"/>
</xsl:for-each>
</font>
</xsl:template>
</xsl:stylesheet>

相应的XML文件为:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="stu.xsl" ?>
<students>
<ClassI>
  <student>
   <number>000001</number>
   <name>黎明</name>
  </student>
  <student>
   <number>000002</number>
   <name>赵怡春</name>
  </student>
  <student>
   <number>000003</number>
   <name>张富平</name>
  </student>
  <student>
   <number>000004</number>
   <name>白丽</name>
  </student>
</ClassI>
<ClassII>
  <student>
   <number>000005</number>
   <name>牛玉德</name>
  </student>
  <student>
   <number>000006</number>
   <name>姚华</name>
  </student>
  <student>
   <number>000007</number>
   <name>李南</name>
  </student>
</ClassII>
</students>

2、3、2 xsl:apply-templates
用于使用分离在外部的模板定义来设计模板,在形式上分离的模板定义可阅读性更强

如XSL文件为:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="ClassI">
<font color="red">
<xsl:for-each select="student">
<xsl:value-of select="number"/>
<xsl:value-of select="name"/>
</xsl:for-each>
</font>
</xsl:template>
<xsl:template match="ClassII">
<font color="blue">
<xsl:for-each select="student">
<xsl:value-of select="number"/>
<xsl:value-of select="name"/>
</xsl:for-each>
</font>
</xsl:template>
</xsl:stylesheet>

相应的XML文件不变

结合HTML标签可以得到更为复杂的XSL样式,如:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>

<xsl:template match="ClassI">
<span style="font-size:14pt;
             color:red;
             font-weight:bolder;
             display:block;
             text-align:center;">一班</span>
<table width="40%" align="center" border="1">
<xsl:for-each select="student">
<tr><td colspan="1" width="20%">学号</td>
<td colspan="1"><xsl:apply-templates select="number" /></td>
</tr><tr>
<td>姓名</td>
<td width="40%"><xsl:apply-templates select="name" /></td>
<td width="10%">学生</td>
</tr>
</xsl:for-each>
</table>
</xsl:template>

<xsl:template match="ClassII">
<span style="font-size:14pt;
             color:red;
             font-weight:bolder;
             display:block;
             text-align:center;">二班</span>
<table width="40%" align="center" border="1">
<xsl:for-each select="student">
<tr><td colspan="1" width="20%">学号</td>
<td colspan="1"><xsl:apply-templates select="number" /></td>
</tr><tr>
<td>姓名</td>
<td width="40%"><xsl:apply-templates select="name" /></td>
<td width="10%">学生</td>
</tr>
</xsl:for-each>
</table>
</xsl:template>

</xsl:stylesheet>

相应的XML文件不变

其中,不使用<xsl:value-of select="number"/>,而改用<xsl:apply-templates select="number" />,主要原因在于这样做更能有效进行样式扩展,如:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl" xml:space="preserve">
<xsl:template>
<xsl:apply-templates />
</xsl:template>

<xsl:template match="ClassI">
<span style="font-size:14pt;
             color:red;
             font-weight:bolder;
             display:block;
             text-align:center;">一班</span>
<table width="40%" align="center" border="1">
<xsl:for-each select="student">
<tr>
<td  width="40%">学号</td>
<td width="60%"><xsl:apply-templates select="number" /></td>
</tr>
<tr>
<td width="40%">姓名</td>
<td width="60%"><xsl:apply-templates select="name" /></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>

<xsl:template match="ClassII">
<span style="font-size:14pt;
             color:red;
             font-weight:bolder;
             display:block;
             text-align:center;">二班</span>
<table width="40%" align="center" border="1">
<xsl:for-each select="student">
<tr>
<td  width="40%">学号</td>
<td width="60%"><xsl:apply-templates select="number" /></td>
</tr>
<tr>
<td width="40%">姓名</td>
<td width="60%"><xsl:apply-templates select="name" /></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>

<xsl:template match="name">
<font color="blue">
<xsl:value-of/>
</font>
</xsl:template>

<xsl:template match="number">
<b>
<xsl:value-of/>
</b>
</xsl:template>

</xsl:stylesheet>

注意XSL的版本,应该为:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl" xml:space="preserve">

2、4 XSL其他元素
2、4、1 xsl:comment
用于在XSL文件中增加注释,注意它只能使用在XSL文件中,而传统的方式<!--和-->还可以使用在网页和XML中

如XSL文件为:
<?xml version="1.0" encoding="gb2312" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template >
<xsl:comment>
This is a comment!
</xsl:comment>
<xsl:for-each select="students/student">
<xsl:value-of select="number" />
<xsl:value-of select="name" />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

相应的XML文件为:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="stu.xsl" ?>
<students>
  <student>
   <number>000001</number>
   <name>黎明</name>
  </student>
  <student>
   <number>000002</number>
   <name>赵怡春</name>
  </student>
  <student>
   <number>000003</number>
   <name>张富平</name>
  </student>
  <student>
   <number>000004</number>
   <name>白丽</name>
  </student>
  <student>
   <number>000005</number>
   <name>牛玉德</name>
  </student>
  <student>
   <number>000006</number>
   <name>姚华</name>
  </student>
  <student>
   <number>000007</number>
   <name>李南</name>
  </student>
</students>

2、4、2 xsl:node-name
用于得到引用元素的名称,并将其作为一般的文字来处理

如XSL文件为:
<?xml version="1.0" encoding="GB2312"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>

<xsl:template match="*">
<br/>
<!--选取元素的名称-->
<xsl:node-name/>
<xsl:apply-templates/>
</xsl:template>

</xsl:stylesheet>

相应的XML文件不变

上述XSL可以进一步定义成更为灵活的格式,对不同的元素使用不同的格式,如:
<?xml version="1.0" encoding="GB2312"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>

<xsl:template match="students">
<br/>
<xsl:node-name/>
<xsl:apply-templates  select="student"/>
</xsl:template>

<xsl:template match="student">
<br/>
----<xsl:node-name/>
<xsl:apply-templates  select="number"/>
<xsl:apply-templates  select="name"/>
</xsl:template>

<xsl:template match="number">
<br/>
--------<xsl:node-name/>
</xsl:template>

<xsl:template match="name">
<br/>
--------<xsl:node-name/>
</xsl:template>

</xsl:stylesheet>

相应的XML文件为:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="stu.xsl" ?>
<students>
<student>
  <number>000001</number>
  <name>黎明</name>
</student>
<student>
  <number>000002</number>
  <name>赵怡春</name>
</student>
<student>
  <number>000003</number>
  <name>张富平</name>
</student>
<student>
  <number>000004</number>
  <name>白丽</name>
</student>
<student>
  <number>000005</number>
  <name>牛玉德</name>
</student>
<student>
  <number>000006</number>
  <name>姚华</name>
</student>
<student>
  <number>000007</number>
  <name>李南</name>
</student>
</students>

2、4、3 xsl:script和xsl:eval
xsl:script用于定义脚本代码
xsl:eval用于调用定义的脚本代码

如XSL文件为:
<?xml version="1.0" encoding="gb2312" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template >
<!--调用xsl:script定义的函数hello() -->
<xsl:eval>
hello()
</xsl:eval>
</xsl:template>
<!--用xsl:script定义的函数hello() -->
<xsl:script>
function hello()
{
return "hello world";
}
</xsl:script>
</xsl:stylesheet>

相应的XML文件不变

2、4、4 xsl:variable
用于定义常量,以代替常用的文本,访问方式为<xsl:value-of select="$常量名称"/>

如XSL文件为:
<?xml version="1.0" encoding="gb2312" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:variable name="var">
My Value
</xsl:variable>
Key=
<xsl:value-of select="$var"/>
</xsl:template>
</xsl:stylesheet>

相应的XML文件不变

2、4、5 xsl:sort
用于对xsl:apply-templates和xsl:for-each的子元素内容进行排序,改变原有输入文档中的内容顺序

如XSL文件为:
<?xml version="1.0" encoding="gb2312" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template >
<xsl:for-each select="students/student">
<xsl:sort select="number" order="ascending" case-order="lower-first" data-type="text">
<xsl:value-of select="number" />
<xsl:value-of select="name" />
</xsl:sort>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

相应的XML文件不变

[此贴子已经被作者于2010-12-11 19:54:41编辑过]

 回到顶部