XML学习笔记(上)"/>
关于XML学习笔记的上部分请见:XML学习笔记(上)
Chapter 6. 样式表
Table of Contents
6.1. XSLT
6.2. XPath
6.2.1. 匹配模式
6.2.2. XPath轴
6.2.3. 谓词
6.2.4. XPath表达式
6.2.5. XPath函数
6.3. XLink
样式表可帮我们解释XML文档中各元素的具体意思,所以通过样式表可直接在浏览器上显示XML文档。目前主要的样式表语言有:
CSS1(Cascading Stylesheets Level 1,层叠式样式表1)
CSS2(Cascading Stylesheets Level 2,层叠式样式表2)
XSLT(XSL Transformations 1.0 XSL 转换 1.0)
在XML文档在序言部分通过xml-stylesheet处理指令可指定关联的样式表。xml-stylesheet指令必须有一个href属性和type属性。href指向样式表的URL,type指定样式表的MIME类型:对CSS为text/css,对于XSLT为text/xml或application/xml。下面是一个简单的使用样式表的XML文档:
<?xml version="1.0"?>
<?xml-stylesheet href="test.css" type="text/css"?>
...
除以上两个必须的属性外,还有4种可选属性:
media,标识该样式应用于什么媒体,如报纸(paper)、计算机监视器(screen)、电视(tv)或所有(all)。
charset,指明样式表采用字符集编码方式,如:utf-8。
alternate,指明是否有可选的样式表,默认为no,表明是主样式表,如果为yes,则是备用样式表。
title,在有alternate的前提下,title用于指定不同样式表的标题。如:
<?xml-stylesheet href="big.css" type="text/css" alternate="yes" title="Large fonts"?>
<?xml-stylesheet href="small.css" type="text/css" alternate="yes" title="Small fonts"?>
<?xml-stylesheet href="medium.css type="text/css" title="Normal fonts"?> #默认的主样式表
样式表现在已成为Web应用中的一个关键技术,它的作用主要体现在以下三个方面:
设计一个样式表可以应用于多个文档。样式表可以存在于XML文档外,XML文档可通过链接使用样式表。这意味着如果你有几千个文档,都可以链接到同一个样式表中,改变一个样式表等于改变几千个文档的显示效果。
实现内容和表现的分离,增强文档的一致性和可维护性。通过单一的样式表,实现所有文档显示的一致。如果显示样式有变动,我们只需维护有限的几个样式表就可以了。
实现一个文档,多个样式。通过样式表,可把一篇文档以HTML形式、PDF形式或文本形式显示出来。
6.1. XSLT
XSLT是XSL的一部份,它是XML的一种应用,指定将一篇XML文档转换成另一种XML文档的规则。XSLT文档即是一篇XML文档,也是一个样式表,里面包含一系列的模板。XSLT处理器对输入XML文档中的元素和样式表中的模板进行比较,如果匹配,则将该模板的内容写入一个输出树中。完成处理后,将输出树串行化成一篇XML文档或其它格式的文档,如HTML或者rtf。
XSLT几个关键术语
源树,原始文档中的元素和元素内容的树。
结果树,转换之后中文档中的元素和元素内容的树。
模板规则,XSLT样式表的基础,分为模式和模板两部份。整个xsl:template元素。
模式,表示源树中的元素与模式规则匹配的条件集合。xsl:template中的match的值。
模板,表示当应用模板规则时,结果树中要实例化的部份。xsl:template元素中的内容。
XSLT定义了35个元素,分为三类:
两个根元素
xsl:stylesheet根元素,XSLT也是一个XML文档,该文档的根元素就是xsl:stylesheet。XSLT元素都属于名称空间xmlns:xsl="http://www.w3.org/1999/XSL/Transform",所以所有的XSLT元素都有xsl前缀。一个最小化XSLT文档:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
</xsl:stylesheet>
xsl:transform元素,作用同上。
13个顶级元素,可直接作为根元素的子元素,包括:
xsl:apply-imports
xsl:attribute-set
xsl:decimal-format
xsl:import
xsl:include
xsl:key
xsl:namespace-alias
xsl:output
xsl:param
xsl:preserve-space
xsl:strip-space
xsl:template模板元素,用于匹配XML文档中的元素。如:<xsl:template match="person">,匹配XML文档中的person元素。
xsl:variable
20个指令元素
xsl:apply-imports
xsl:apply-template应用模板元素,用于显示指定的元素值(内容)。如:<xsl:apply-template select="name">,显示name元素的值。
xsl:attribute
xsl:call-template
xsl:choose
xsl:comment
xsl:copy
xsl:copy-of
xsl:element
xsl:fallback
xsl:for-each
xsl:if
xsl:message
xsl:number
xsl:otherwise
xsl:processing-instruction
xsl:text
xsl:value-of选择元素,用于计算元素的值(内容)。如:<xsl:value-of select="name">,获得XML文档中name元素的值(内容)。
xsl:variable
xsl:when
XSLT函数