XML是一种电脑程序间交换原始数据的简单而标准的方法,然而基于XML的数据本身并不包含数据显示的信息。样式表是一种专门描述结构文档表现方式的文档,即可以描述这些文档如何在屏幕上显示,也可以描述它们的打印效果,甚至声音效果。
使用样式表定义XML文档数据的显示方式,将XML数据与其表达分离的做法符合业界提倡的数据或内容与表示层分开的思想。这样一来,XML格式或文档不会重蹈某些HTML文档结构混杂,内容繁乱的覆辙。XML的编写者也可以集中于数据本身,而不受显示方式的细枝末节的影响。不仅如此,样式表还带来另一个好处,即定义不同的样式表可以使相同的数据呈现不同的显示外观,从而适合不同应用,甚至能够在不同的显示设备上显示。这样,XML数据就可以得到很大程度上的重用性,满足不同的应用需求。
W3C给出了两种样式表语言的推荐标准:CSS,Cascading Style Sheets,级连样式表语言,XSL extensible Style sheet,可扩展样式表语言。
CSS
级连样式表语言CSS是一种样式描述规则,是一种针对HTML而提出的样式表语言,现在同样可以很好地应用于描述XML文档的显示,利用CSS,我们可以定义HTML或XML文档中元素的显示效果,包括元素的位置,颜色,背景,边框,字体,排版格式等等。
<?xml-stylesheet type=”text/css” href=”CSS样式表文件路径”?>
<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="hello.css"?>
<xsampdoc>
<greeting>Hello,<extension>there!</extension></greeting>
<answer class="ans">
<extension>Good morning!</extension>
<question>How are you?</question>
</answer>
</xsampdoc>
hello.css
xsampdoc
{
margin-top:.7in;
margin-bottom:.7in;
margin-left:1.5in;
margin-right:1in;
color:navy;
background-color:white;
display:block
}
greeting
{
display:block;
font-family: Arial, Helvetica, sans-serif;font-size: 32pt;
width: 30em;
color: red
}
question
{
display:block;
font-size: x-large;
color: black
}
answer.ans
{
display: block;
font-size: 20pt;
color: blue
}
XSL
XSL是一种用来转换XML文档的样式表,它包含转换和格式化XML文档的规则。
XSL在转换XML文档时分为明显的两个过程:首先转换文档结构,然后将文档格式化输出。这两个步骤可以分离开单独处理,因此在XSL发展过程中逐渐分裂为两种分支:XSLT(结构转换)和XSL-FO(格式化输出)。其中XSL-FO的作用类似于CSS在HTML中的作用,但是发展还不成熟,这里不做介绍。
Xpath是一种专门用在XML文档中查找信息的语言,用来如何描述如何识别,选择,匹配XML文档中的各个构成元件,包括元素,属性,文字内容等。Xpath隶属XSLT,因此,我们通常会将XSLT和Xpath语法混在一起说。XML是数据库,XPath就是SQL语言,XML是文件系统,XPath就是目录导航命令
XSL包含XSLT和Xpath的强大功能,从而可以把XML文档转换成任何一种其它格式的文档,例如XNL文档,HTML文档,XHTML文档,VRML文档,SVG文档。
XSL的基本语法
<?xml version="1.0" encoding="gb2312"?>
<?xml-stylesheet type="text/xsl" href="student.xsl"?>
<roster>
<student ID="101">
<name>李华</name>
<sex>男</sex>
<birthday>1978.9.12</birthday>
<score>92</score>
<skill>Java</skill>
<skill>Oracle</skill>
<skill>C Sharp</skill>
<skill>SQL Server</skill>
</student>
<student ID="102">
<name>倪冰</name>
<sex>女</sex>
<birthday>1979.1.12</birthday>
<score>89</score>
<skill>Visual Basic</skill>
<skill>SQL Server</skill>
<skill>ASP</skill>
</student>
<student ID="103">
<name>张君宝</name>
<sex>男</sex>
<birthday>1982.9.9</birthday>
<score>98</score>
<skill>C Sharp</skill>
<skill>SQL Server</skill>
<skill>UML</skill>
</student>
</roster>
student.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>
<h2 align="center">学生成绩单</h2>
<table border="1" cellpadding="0" align="center">
<tr><th>姓名</th><th>性别</th><th>生日</th><th>成绩</th></tr>
<xsl:for-each select="/roster/student">
<tr>
<td><xsl:value-of select="name"/></td>
<td><xsl:value-of select="sex"/></td>
<td><xsl:value-of select="birthday"/></td>
<td><xsl:value-of select="score"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
XSL本身是结构完整的XML文档,所以在书写时要注意标签的匹配问题。<xsl:stylesheet>即是XSL的声明语句,也是跟元素,必须位于文件的首部,通常也要利用xmlns属性指明XSL的命名空间。样式表中所有的模板都有标签<xsl:template>标明,模板可以说明处理的对象(元素,属性),处理的方式或是转换的结果。
XSL模板
XSL文件是由模板组成的,一个XSL文件至少包含一个买办。可以把XSL的设计细化成一个个模板,最后再将这些模板组合成一个完成的XSL。这种方法如同程序中模块化设计细化一样,可以使你先从整体上考虑整个XSL的设计,然后将一些表现形式细化成不同的模块,再具体设计这些模块,最后将他们整合在一起。
定义一个模板:<xsl:template match=”匹配模式”>
调用一个模板:<xsl:apply-templates select=”模式”>
XSL通过<xsl:if>,<xsl:for_each>,<xsl:choose>,<xsl:sort>语句对文档内容过滤,排序输出。
CSS与XSL比较
用途不同:CSS主要针对HTML,XSL具备CSS无法达到的功能,如用命令将一个XML文档转换为另一个文档并存盘。
处理结果不同:XSL采用一种转换的思想,它将一种不含显示信息的XML文档转换为另一种可以用某中浏览器浏览的文档,转换湖的输出码或者存为一个新的文档,或则暂存于内存中,但都不修改源代码。而CSS没有任何转换动作,只是针对结构文档中的各个成分,依照样式规定一一设定外观式样,再由浏览器依据这些式样显示文档,整个过程没有任何新码产生。
表现能力不:XSL支持排序,超连结等等。
语法不同:CSS自成体系,XSL根据XML的语法定义。