收藏 分享(赏)

xml文档的显示.ppt

上传人:kpmy5893 文档编号:8176761 上传时间:2019-06-12 格式:PPT 页数:87 大小:668.50KB
下载 相关 举报
xml文档的显示.ppt_第1页
第1页 / 共87页
xml文档的显示.ppt_第2页
第2页 / 共87页
xml文档的显示.ppt_第3页
第3页 / 共87页
xml文档的显示.ppt_第4页
第4页 / 共87页
xml文档的显示.ppt_第5页
第5页 / 共87页
点击查看更多>>
资源描述

1、第四章 XML文档的显示,XML实用教程,要点及主要内容,样式单的概念 使用CSS创建样式单的方法和特点 使用XSL创建样式单的方法和特点 CSS和XSL各自的优势,章节安排:,4.1样式单基础 4.2 CSS样式单 4.3 XSL样式单 4.4 两种样式单比较 4.5 小结 4.6 习题,4.1 样式单基础,制定XML标准的目的是让数据结构化,并赋予其明确的语义,使之易于数据的交换,因此,XML不再像HTML那样,将内容标记和外观描述标记混合在一起,而是设计成一种纯粹基于内容的解析式语言,将内容与表现形式相分离,即XML文档中只包含数据信息,并不提供数据的显示功能。但如果不加修饰,XML文档

2、的数据又难免枯燥,本章介绍的样式单就是用来解决XML文档的显示问题,由样式单告诉浏览器该如何显示XML文档中所标记的文本内容。 样式单(Style Sheet)是一种专门描述结构文档表现方式的文档,它既可以描述这些文档如何在屏幕上显示,也可以描述它们的打印效果,甚至声音效果。样式单一般不包含在XML文档内部,而以独立的文档方式存在。,与HTML描述数据显示方式的传统方法相比,样式单有以下优点:,1)文档体积小。在实际应用中,常常给相同名称标记下的内容定义相同的表现方式,传统的方法需要在每个标记中予以描述,造成大量的重复定义。而在样式单中,对于同一个标记只需进行一次描述,从而大大缩小了需要传输的

3、文件的体积,可提高传输速度,并节约带宽。 2)表达效果丰富。样式单可以支持文字和图像的精确定位、三维层技术以及交互操作等,对于文档的表现力远远超过HTML中的标记。更重要的是,样式单的标准规范独立于它所描述的文档,当需要实现更丰富的表达效果时,仅需修改样式单规范即可,不会牵涉到原始的XML文档内容。 3)可读性好。样式单对各种标记的显示进行集中定义,且定义方式直观易读。这使得它易学易用,可读性、可维护性都比较好。同时,由于采用内容与表现形式相分离的方式,XML文档也相对简洁、清晰,重点突出对内容本身的描述,而不必考虑文档的显示功能。这样,XML文档就不会重蹈HTML文档结构混杂、内容繁乱的覆辙

4、,XML的编写者也可以集中精力于数据本身,而不受显示方式等细节的影响。 4)便于信息检索。样式单可以实现非常复杂的显示效果,由于样式描述与数据描述相分离,显示细节的描述并不会影响到文档中数据的内在结构。因此,网络搜索引擎对文档进行搜索时,不会被各式各样的显示描述标记所干扰。 5)实现同一文档的多种显示。样式单的另一大好处在于,定义不同的样式单可以使相同的数据呈现出不同的显示外观,从而适合于不同应用,甚至能够在不同的显示设备上显示。这样,XML数据就可以得到最大程度的重用,满足不同的应用需求。 基于以上优点,W3C推荐采用样式单来描述结构文档的显示效果。目前,W3C为XML数据显示发布了两个建议

5、规范:CSS和XSL,下面将分别介绍如何使用这两种样式单来配合XML完成文档的显示。,4.2 CSS样式单,4.2.1 CSS的结构及规则 4.2.2关联CSS与XML文档,4.2.1 CSS的结构及规则,CSS(Cascading Style Sheets,层叠样式单)是一种样式描述规则,目前W3C有两个推荐标准,CSS1和CSS2。CSS1于1996年12月通过,CSS2则于1998年5月通过。CSS2是在CSS1的基础上制定的,基本上涵盖了CSS1,并在CSS1的基础上增加了媒体类型、特性选择符、声音样式等功能,并对CSS1原有的一些功能进行了扩充。CSS最初是针对HTML而提出的样式单

6、语言,但它同样可以很好地应用于描述XML文档的外观表现。利用CSS,我们可以定义HTML或XML文档中元素的显示效果,包括元素的位置、颜色、背景、边空、字体、排版格式等等。,例4-1:一个含有CSS样式单的HTML文档及它在浏览器中的显示结果,CSS的基本思想是为结构文档中的标记定义相应的一组显示样式。定义的基本格式为: 选择符样式属性: 取值; 样式属性: 取值; . ,(1)选择符 选择符用于指定样式规则所应用的元素的名称,浏览器在碰到这些元素时,就使用定义好的样式来显示它们。基本的选择符包括标记选择符、类选择符、标识选择符、伪类选择符,下面分别介绍。 标记(tag)选择符 标记可以是HT

7、ML中的标记,也可以是XML中已定义的标记。具体的定义方式是: 标记名样式属性: 取值; 样式属性: 取值; . 清单4-1为HTML中的标记定义了样式,将该标记下的文本用红色显示,因此,浏览结果中的第一行是红色的。,类(class)选择符 无论是HTML或XML文档,有些内容是可以分类处理的,相应地,对于某一类的内容可以定义不同的样式进行显示。清单4-1定义了一个类“myclass”,并为其定义了绿色显示的样式,所以属于该类的元素,即第二行文本,显示出来是绿色的。定义样式时,class还可以与标记相关联,也就是说class的样式受到包含它的标记的制约。因此,清单4-1为属于myclass类的

8、标记定义了蓝色显示的样式,相应地,第三行文本呈蓝色。 与标记不相关的类选择符的定义方法:.类名样式属性: 取值; 样式属性: 取值; . 与标记相关的类选择符定义方法:标记名.类名样式属性: 取值; 样式属性: 取值; . 注意:在对XML文档中的class定义样式时,该class应该是在DTD中预先声明了的,否则会导致错误。,标识(id)选择符 在HTML或XML文档中,往往需要唯一地标识一个元素,即赋予它一个id标识,以便在对整个文档进行处理时能够较快地找到这个元素。CSS也可以将id标识作为选择符进行样式设定,定义的方法与类大同小异,只要把符号“.”改成“#”就行了。方法是: 与标记不相

9、关的标识选择符的定义:#标识名样式属性: 取值; 样式属性: 取值; . 与标记相关的标识选择符定义:标记名#标识名样式属性: 取值; 样式属性: 取值; . 一般情况下,为标识定义的样式是优先于为类定义的样式的,因此清单4-1中第四行中的文本虽然属于类“myclass”,但显示效果为黑色。, 伪类(pseudo-classes)选择符 伪类可以看做是一种特殊的类选择符,是能被支持CSS的浏览器所自动识别的特殊选择符。它的最大的用处就是可以对链接在不同状态下定义不同的样式效果。 伪类的定义方法是:选择符: 伪类 样式属性: 取值 伪类和类不同,是CSS已经定义好的,不能象类选择符一样随意用别的

10、名字,根据上面的语法可以解释为选择符在某个特殊状态下的样式。 我们最常用的是4种A(锚)元素的伪类,它表示链接的4种不同状态:link、visited、active、hover(未访问的链接、已访问的链接、激活链接和鼠标停留在链接上)。可以给它们分别定义不同的效果: A:link color: red; text-decoration: none A:visited color: green; text-decoration: none A:hover color:blue; text-decoration: underline A:active color: brown; text-deco

11、ration: underline 那么,链接未访问时的颜色是红色且无下划线,访问后是绿色且无下划线,激活链接时为蓝色并有下划线,鼠标在链接上时为棕色并有下划线。 我们还可以将某个样式同时施加在多个选择符指定的不同元素上,只要将在大括号括起来的样式定义之前的各选择符之间用逗号分隔即可: 选择符, 选择符, . 样式属性: 取值; 样式属性: 取值; . 如果选择符之间用空格分隔,则是用前面的父元素来约束后面的子元素: 选择符 选择符 . 样式属性: 取值; 样式属性: 取值; . ,(2)样式属性 样式属性就是指元素的哪些属性可以在样式单中进行改变,在CSS1和CSS2中有很多的篇幅讲样式属性

12、。其中CSS1中包括字体属性(字形、大小、粗细、倾斜等)、颜色属性、背景属性、文本属性、边框属性(页边空、边框、内空等)、显示属性(独立块、内联、列表、表格、隐藏等)几大类。在CSS2中对显示属性的最大改进就是增加了表格的显示方式,此外还增加了一些与页面排版、跨媒体出版相关的内容。这里我们不加赘述。 (3)属性值 在定义样式时,除需指出样式所应用的元素、元素的属性之外,还要给属性赋一个值。根据属性的不同,属性值的选取也有所不同,主要有以下四种:,长度: 在样式中很多的属性都与长度有关,如宽高、字号、字距、行距、边空、线宽等等。需要注意的是:当长度作为一个尺寸的度量,其单位是非常重要的,否则,失

13、之毫厘,谬以千里,显示结果可能就会出乎意料之外了。 URL: 有时需要给某些属性赋予URL值,如背景图象属性(background-image)。在进行URL赋值时,要将URL放在url()之中,也可以将其用单引号或者双引号括起来。 颜色: 在CSS中颜色是个很重要的属性,颜色值的赋值有四种形式:颜色名称、十六进制数、RGB十进制数及百分比方式,其中前两种方式较为常用。例如对于红色来讲可以用下面几种方法定义:pcolor:red、pcolor:#ff0000、pcolor:RGB(255,0,0)和pcolor:RGB(100%,0%,0%) 。 关键字: 这里的关键字是指预先定义好的字符型属

14、性值,对于不同的属性有不同关键字值。例如上面提到的颜色名称(red)实际上就属于关键字,其它的又如用于线型的none、solid、dashed、double等等。,4.2.2 关联CSS与XML文档,根据XML文档的不同用途,关联CSS与XML文档的方法也有所不同。有些XML文档主要面向数据交换,其表现形式相对简单;有些文档是专门面向Web发布的,它的表现力相对就要强一些。总结起来,使用CSS来显示XML文档的方式有二:引用方式和嵌入方式。,4.2.2.1 引用方式,引用方式是指XML文档本身不含有样式信息,而是通过引用一个外部的CSS文档来定义文档的表现形式。大部分XML文档都采用这种方式,

15、这也与XML语言内容与形式分开的原则相一致。使用引用方式关联CSS和XML文档的一个好处是可以将同一个样式单用于多个文档。具体实现的方法是在XML文档的开头部分加上一条处理指令:其中: 处理指令的“type”属性是正在使用的MIME类型的样式单。对于CSS来说,其值是“text/css”,对XSL来说,则是“text/xsl”;“href”属性值是一个URL,可以是一个相对地址,也可以是绝对地址,指明在何处可找到样式单。,例如,使用处理指令,表示样式单mystyle.css放在Web服务器根目录下的style目录中,这里是个相对地址。“href”属性值也可以是指向另一个Web站点上的样式单的绝

16、对URL值,例如: 此外,在一个XML文档中还可以使用多个处理指令,以便应用不同样式单中的规则。 清单4-2是一个描述图书信息的XML文档books.xml,按照处理指令的指示,该文档在浏览器上的表现方式就由同目录下的样式文件mystyle.css所决定,因此,在文档的XML声明语句(即第一行)之后应添加如下代码:。清单4-3是mystyle.css文件。XML文档的浏览效果如图4-2所示。,清单4-2:数据库系统概论7040195836王珊 萨师煊高等教育出版社30计算机网络7505387863谢希仁电子工业出版社40,清单4-3: book font-size:15pt; font-wei

17、ght:bold; color:blue; display:block; margin-bottom:5pt; ISBN, author, publisher, price font-weight:bold; font-size:12pt; display:block; margin-left:20pt; title font-weight:bold; font-size:14pt; display:block; color:red; margin-top:5pt; margin-left:8pt; ,4.2.2.2 内嵌方式,内嵌方式是指将CSS样式信息直接包含到XML文档中,为元素设置st

18、yle属性,并在属性值中给出对其样式的定义。这种用法主要出现在一些特殊的XML文档中,一般来讲内嵌CSS样式的XML文档本身就是面向显示的,如SVG、SMIL等。清单4-4是一个内嵌方式的例子,其中单个元素的样式是使用“style”属性声明的。,清单4-4:数据库系统概论 7040195836王珊 萨师煊高等教育出版社30 ,4.3 XSL样式单,4.3.1 XSL概述尽管CSS样式单可以解决简单的XML显示问题,然而它最初是为HTML开发的,对处理复杂的XML文档在功能上略显不足,W3C因此为XML制定了专门的样式单语言XSL(可扩展样式单语言,eXtensible Stylesheet L

19、anguage),XSL其主要用途是将一个XML文档转换为另外的文档(得到的文档可以是XML、HTML、无格式文本或任何其他基于文本的文档)以及定义转换后的文档显示外观,提供了比CSS更为强大的功能。XSL包括三部分内容:XSLT(XSL Transformation):用于将XML文档转换为其他形式的文档的语言;XPath:用于在XML文档中导航的语言,描述如何识别、选择、匹配XML文档中的各个构成元件,包括元素、属性、文字内容等。XSLT使用XPath对XML文档中的具体部分进行访问和引用。FO(Format Object),用于格式化XML文档的语言。用来格式化输出,是一种定义XML显示

20、方式的语言。,使用XSL定义XML文档显示方式的基本思想是:通过定义转换模板,将XML源文档转换为带样式信息的可浏览文档。最终的可浏览文档可以是HTML格式、FO格式、或者其它面向显示方式描述的XML格式,限于目前浏览器的支持能力,大多数情况下是转换为一个HTML文档进行显示。 XSL处理器在进行显示输出时,首先根据XML文档构造源树(由于XML文档是严格的层级结构,所以我们形象地称XML文档为文档树,其中每个元素称作树的一个节点。根元素就是根节点),然后根据给定的XSLT,使用XPath在XML源树进行相关导航,并将源树转换为可以显示的结果树,这个过程称作树转换,最后再按照FO解释结果树,产

21、生一个可以在屏幕上、纸上、语音设备或其它媒体中输出的结果,这个过程称作格式化。,至今W3C还未能给出FO的一个统一标准,但是XSLT却日趋成熟,其正式推荐标准于1999年11月16日发布,现在一般所说的XSL大都指的是XSLT。XSLT的主要用途就是数据转换应用。由于以XML为基础的电子商务广泛普及,XSLT作为数据转换的角色也越来越重要。例如直接将电视新闻的数据格式转换成报纸新闻需要的数据格式,对EDI(电子数据交换)数据进行统计、排序等等。XSLT是完成这类工作的理想工具。 本章着重介绍XSLT对XML文档的显示转换功能,并将XPath作为XSLT的基础进行介绍。对于FO只作简要介绍。,4

22、.3.2 XSLT初步,XSLT主要的功能就是转换,它将一个没有外观样式信息的XML文档作为一个源树,将其转换为一个有样式信息的结果树。在XSLT文档中定义了与XML文档中各个逻辑成分相匹配的模板,以及匹配转换方式,通过 XSLT,可以给输出文件添加或移除元素和属性,也可重新排列元素,执行测试并决定隐藏或显示哪个元素等等。XSLT只是一种说明性的计算机语言,需要借助其他工具来实现转换,这个工具就是XSLT处理器。,XSLT处理器是根据XSLT文档,将源XML文档转换为目标文档的工具。XSLT处理器并非由W3C提供,而是由一些厂商或个人自行开发的。目前最常用的几种XSLT处理器有: Xalan:

23、是Apache公司提供的一款XSLT处理器,开发语言为Java,支持XSLT1.0。 Saxon:是由英国的Michael Kay公司开发的XSLT处理器,其新版本支持XSLT2.0。 MSXML:是微软开发的XSLT处理器,支持XSLT1.0。MSXML已经被集成到IE浏览器中,但需要IE6.0以上的版本才会支持。我们可以在XML文档中指定所使用的XSLT样式文档,然后使用IE浏览器打开该XML文档,直接查看转换后的结果。 下面通过一个XSLT文档的例子,让读者初步掌握XSLT的基本语法和功能。清单4-5是一个XSLT文档,名为mystyle.xsl,用于转换清单4-2的XML文档。这里,为

24、了把XSL样式表链接到XML文档,清单4-2的XML文档的第一行之后,样式单声明语句应这样添加: ,清单4-5:图书信息titleauthor,其中: XSL 样式表本身也是一个 XML 文档,因此它有XML声明。 定义该文档是一个 XSLT 样式单文档,包括XSLT版本号和命名空间两个属性。version属性说明样式表只采用XSLT 1.0的标准功能。如需使用XSLT的元素、属性以及特性,我们必须在文档开头声明 XSLT命名空间,和XML中的命名空间一样,用来防止元素名称重复和混乱,其中前缀xsl表示文档中使用的元素遵守W3C的XSLT规范。注意:还可以用xsl:transform来声明样式

25、单XSL,它和xsl:stylesheet是完全同义的。 元素定义了一个模板,属性match=“/“ 说明XML源文档中,这个模板规则作用的起点。“/“是一种XPath语法,在4.3.4节进行介绍,这里的“/“代表XML树型结构的根(root)。 模板元素内部的内容定义了输出到结果文档的HTML代码。当模板规则被触发,模板的内容就会控制输出的结果。,元素可用于选取指定的节点集中的每个XML元素。select 属性的值是一个XPath表达式,该表达式的工作方式类似于定位某个文件系统,在其中正斜杠可选择子目录。 元素用于提取某个选定节点的值,并把值添加到转换的输出流中。select属性指定要处理的

26、节点名称,也是使用XPath语法,具体的就是找到和元素,然后将元素的值按模板样式拷贝到输出文档。 最后两行分别是模板的结束标记及样式表的结束标记。,图4-3是使用样式单的XML文档在浏览器中的显示效果。,图4-3 使用清单4-5的XSL显示XML文档,XSLT转换既可以在客户端进行,也可以在服务器端进行。两者分别对应着不同的转换模式:,客户端转换模式这种方式是将XML和XSL文档都传送到客户端,由浏览器实时转换。采用这种模式的前提是浏览器必须支持XML和XSL。服务器端转换模式 由于不是所有的浏览器都支持XML和XSL,因此可以考虑在服务器上将XML转换成HTML的方法。XSL设计的目的之一就

27、是使得在服务器上将数据从一种格式转换成另一种格式成为可能,并将可读数据返回到所有未来的浏览器中。在服务器上进行XSL转换正在成为未来Internet信息服务器工作任务的一个主要部分,同时我们将看到专用浏览器市场的发展,如:Braille、有声网络、网络打印机、手持PC、移动电话等。在这种模式下,XML文件下载到浏览器之前先转换成HTML,然后再将HTML文件发送至客户端进行浏览。这里又有两种方式: 动态方式:即当服务器接到转换请求时再进行实时转换,这种方式无疑对服务器要求较高。 静态方式:即预先将XML转换成HTML文件,接到请求后再调用转换好的HTML文件。,第#页,4.3.3 XSLT元素

28、,通过前面的内容,读者已经对XSLT的基本概念和它的转换过程有了一定了解,下面介绍XSLT的具体语法。,4.3.3.1 xsl:template和xsl:apply-templates元素模板(template)是XSLT中最重要的概念之一。模板用于规定附加于XML源 文档上的转换方式,它类似于一个容器,用于存放一些样式信息,这些样式信息是 作用于源树上的各种节点,并且可以自由地规定哪一种模板作用于哪一个节点, 哪一个节点需要出现,哪一个节点不需要出现。经过转换的结果树,它的各个节 点的关系与源树可以不同。XSLT文档就是由一个个的模板所组成的,任何一个 XSLT文档至少包含一个模板。模板可以

29、被拼装组合使用,也可以单独成块,不同 的模板控制不同的输出格式。,模板由两部分组成:匹配模式(match pattern)和执行。简单地讲,匹配模式指定了XML源文档中哪一个节点将被模板处理,执行则定义输出的是什么格式。两部分使用的XSLT元素分别为xsl:template和xsl:apply-templates。 (1)xsl:template的语法是:xsl:template元素的作用是定义一个新模板,该元素有四个属性:match:属性值是一个XPath表达式,指定该模板样式与源XML文档的何种元素相匹配。如 果模板是最上层模板,则match属性的值应该为“/”,表示根节点。该属性可选,如

30、果省略,则必须设置 name 属性。name:为模板定义名称,从而使apply-templates元素可以根据需要来指定使用的模板名称。该属性可选,如果省略,则必须设置 match 属性。mode:用于确定处理方式,并将它与一个具有匹配值的apply-templates元素相匹配。该属性可选。prority:用于在相同的匹配间指定优先级。该属性可选。属性name、priority和mode用于区别匹配同一节点的不同模板,这三个属性并不常用。match属性则控制模板的匹配模式,匹配模式是用来定位XML源文档中哪一个节点被模板处理。一个模板匹配一个节点。,例如:以清单4-2的XML文档为例,下面的

31、XSL代码说明模板匹配所有的book元素下面的代码说明模板匹配所有的title元素和所有的author元素:下面的代码说明模板匹配所有的父节点为book元素的title元素:下面的代码则说明模板匹配根节点:,(2)xsl:apply-templates的语法是:xsl:apply-templates元素用于向当前元素或当前元素的子元素应用模板,即用来执行哪一个节点被模板具体处理,可以将它理解为程序中调用子函数。该元素有两个属性:select:属性值是一个XPath表达式,规定要用模板来处理的节点。值为“*”选取整个节点集。该属性可选,如果省略,意味着将当前节点的所有子节点依次与模板相比较,一旦

32、有匹配的模板则按照相应模板进行转换输出。mode:如果存在为相同元素定义的多个处理方法,那么用 mode 可以区分它们。该属性可选。 xsl:apply-templates元素总是包含在xsl:template元素中,比如:这段代码说明模板匹配整个文档(根节点),具体执行时处理根节点下所有book元素。而下面这段代码则表示模板匹配book节点,所有book下的子元素都将被处理。,4.3.3.2 xsl:value-of元素,xsl:value-of的语法是:xsl:value-of用于选取XML源文档中某个元素的值,并把它输出。该元素有两个属性:select:这是一个必需的属性。属性值是一个X

33、Path 表达式,规定了从哪个节点或属性来提取值。disable-output-escaping:该属性可选,属性默认值为“no“。如果值为“yes“,通过实例化元素生成的文本节点在输出时将不进行任何转义。比如如果设置为 “yes“,则 “,执行后,title元素中的内容将被单独显示出来。其中match=“book“定义模板匹配book节点,xsl:value-of语法说明需要输出一个节点的值,而select=“title“则定义需要被输出的元素为title。xsl:value-of还有更多,更复杂的语法,因为是涉及寻找和定位的功能,将在后面的XPath语法中详细介绍。具备类似功能的还有xsl

34、:copy和xsl:copy-of元素,xsl:copy的作用就是把当前正在应用xsl:copy规则的节点从源文档拷贝到输出结果中。通过copy可以在输出结果中创建一个节点,这个节点同源文档中的当前节点具有相同的名称,相同的名空间,相同的类型。但是,当前节点的子节点,节点的属性,以及其它一些内容不能自动的进行拷贝,而是需要使用一定的语句才能拷贝。而xsl:copy-of元素则会将属性和子元素自动复制进来。下面用一个综合示例来帮助以上几种XSLT元素的理解,清单4-6是对清单4-2的XML源文档的样式单描述。,清单4-6:图书信息 ,Title: Artist: ,这段XSLT代码的执行过程分析

35、如下: 在XML声明和XSL声明之后,样式单利用 声明XSL模板,并调用该模板;根据,系统最先匹配XML源文档的根节点。根节点用“/“表示,它的匹配方法在一对括起的源码中声明。按照这段代码,首先生成带有样式信息的HTML文档的开头一段代码,即:“ 图书信息”;接下来,系统看到了的指示,于是,将XML源树根节点的所有子节点(即所有book节点)与模板进行匹配,就象函数调用一样,现在系统找到了与book节点匹配的模板,就跳到用括起的“函数”中继续生成该模板下面的HTML代码:“”;现在,系统又接到了新的指示。这条指示要求系统寻找当前book节点下名为title的子节点,并对其应用模板进行转换输出。

36、系统于是找到与title节点匹配的模板,就跳到用括起的“函数”中继续生成该模板下面的HTML代码:“Title: ”;,紧接着,指示输出当前title节点的内容;之后,系统继续输出HTML代码:“”。至此,系统已处理完中的所有内容,可以“函数返回”了;系统返回到括起的源码中,用同样的方式处理下一个XSL指示:,处理完毕,返回输出HTML代码“”。至此,模板已经全部处理。系统再对下一个book节点生成相应的内容,直到book节点全部处理完毕;最后,系统返回到模板,完成HTML最后的HTML代码:“”。,把以上HTML代码串起来,即生成结果文档,它在IE中的浏览效果如图4-4所示:,图4-4 使用

37、清单4-6的XSL显示XML文档,4.3.3.3 xsl:for-each元素,xsl:for-each的语法是:xsl:for-each元素可遍历指定的节点集中的每个节点。该元素是一个循环控制元素,它按照select属性的XPath表达式,搜索文档中与其相匹配的元素,如果XML文档有m个符合条件的元素,则会循环m次。,清单4-7的XSL文档用于输出清单4-2的XML源文档中的所有图书的书名和作者: 清单4-7:图书信息TitleAuthor,4.3.3.4 xsl:sort元素,xsl:sort元素用于对选中的节点进行排序,元素的select属性值是一个XPath表达式,用于规定节点的排序关

38、键字。清单4-8的XSL文档用于输出所有图书的书名和作者,并按照书名排序:,清单4-8:图书信息TitleAuthor,4.3.3.5 xsl:if元素,xsl:if的语法是:xsl:if元素用于检验条件,它类似于编程语言中的if语句。该元素包含了一个模板,只有指定的条件成立时,才应用此模板。if元素的test属性规定要测试的条件,是一个必需的属性。清单4-9检测所有book节点的的price子节点,如果价格大于35,则输出这本图书的书名和作者:,清单4-9:图书信息TitleAuthor,4.3.3.6 xsl:choose, xsl:when和xsl:otherwise元素,xsl:if语

39、法没有else的属性。如果要进行多重条件测试,需要使用xsl:choose / xsl:when / xsl:otherwise三个流程控制元素。xsl:choose元素与xsl:when、xsl:otherwise元素结合,可表达多重条件测试。首先测试xsl:when条件,如果满足,则处理xsl:when的内容,否则处理xsl:otherwise的内容。相当于程序语言中的if-else控制语句。 下面这段XSL代码测试当前元素有没有color属性,如果有,则输出该属性,否则输出默认值“green”(符号作为属性名的前缀,表示取得该属性的值):green ,清单4-10在图书价格高于35时,向

40、author列添加粉色的背景色:,清单4-10: 图书信息TitleAuthor,4.3.3.7 xsl:element元素,xsl:element语法如下:xsl:element元素可以用于用于在输出文档中创建元素节点,该元素有四个属性: name:规定新创建的元素名称,它是必需的属性; namespace:可选属性。规定元素的名称空间URI; use-attribute-sets:可选属性。是空格分隔的属性集,该属性集包含了需要向元素添加的属性; 例如,下面这段XSLT代码创建一个名为“Authors”的元素,该元素包含每个author元素的值:,4.3.3.8 xsl:attribute

41、元素,xsl:attribute的语法是:xsl:attribute元素常与xsl:element元素结合出现,用于为新创建的元素添加属性,xsl:attribute元素会替换名称相同的已有属性。能够使用xsl:attribute元素的都是元素节点,并且xsl:attribute元素的内容只能包含字符数据。该元素有两个属性:name:规定新创建的属性名称,它是必需的属性;namespace:可选属性。规定属性的名称空间URI; 例如:下面的XSLT代码向 picture 元素添加 source 属性,并使用 “images/name“ 中的值为其赋值:,4.3.3.9 xsl:text元素,x

42、sl:text的语法是:xsl:text元素用于向输出写文本,即通过样式表生成文本节点。该元素可包含文本、实体引用,以及 #PCDATA。属性disable-output-escaping是可选的,默认值为“no”。如果值为“yes”,通过实例化xsl:text元素生成的文本节点在输出时将不进行任何转义。比如如果设置为“yes”,则“”将不进行转换。如果设置为“no”,则被输出为“”。 例如,清单4-11的XSL文档用于显示每本图书的title。如果不是最后一个或倒数第二本图书,则在每个书名之间插入“, ”。如果是最后一本图书,则在title后添加“!”。如果是倒数第二本图书,则在 title

43、 后添加“, and ”:,清单4-11:图书信息Titles:, , and !,4.3.3.10 xsl:output元素,xsl:output的语法是: ,xsl:output元素定义了输出文档的格式。xsl:output是顶层元素(top-level element),必须是xsl:stylesheet或xsl:transform的子节点。该元素有十个属性:method:可选。标识用于输出结果树的总体方法。如果没有前缀,则标识此文档中指定的方法,必须是 “xml“、“html“、“text“ 或不是NCName的限定名之一)。如果有前缀,则展开并标识输出方法。method 属性的默认值

44、的选择如下所示。如果下列任何条件为真,默认的输出方法为“html”:结果树的根节点包含元素子级;结果树中根节点的第一个元素子级(即文档元素)的扩展名称包含本地部分“html”(任意大小写组合)和空命名空间 URI;结果树中根节点的第一个元素子级之前的任何文本节点只包含空白字符;否则,默认的输出方法为 “xml“。如果没有 元素或没有 元素指定了 method 属性的值,应使用默认的输出方法;version:可选。设置输出格式的 W3C 版本号。(仅在 method=“html“ 或者 method=“xml“ 时使用);,encoding:可选。设置输出中编码属性的值;omit-xml-dec

45、laration:可选。 “yes“ 规定在输出中省略 XML 声明 ()。 “no“ 规定应在输出中包含 XML 声明。默认是 “no“。standalone:可选。规定 XSLT 处理器是否应输出独立文档声明;该值必须为 yes 或 no。默认是 “no“。Netscape 6 不支持该属性;doctype-public:可选。规定 DTD 中要使用的公共标识符。即输出中 DOCTYPE 声明的 PUBLIC 属性的值;doctype-system:可选。规定 DTD 中要使用的系统标识符。即输出中 DOCTYPE 声明的 SYSTEM 属性的值;cdata-section-element

46、s:可选。一个空格分隔的元素列表,这些元素的文本内容应作为 CDATA 部分来输出;indent:可选。在输出结果树时是否要增加空白;该值必须为 yes 或 no。Netscape 6 不支持该属性;media-type:可选。定义输出的 MIME 类型(数据的媒体类型)。默认是 “text/xml“。Netscape 6 不支持该属性。,在下面的例子中,输出是 XML 文档,版本1.0。字符编码方式被设置为 “ISO-8859-1“,输出会进行缩进,以增进可读性:. .下面的这个例子输出的则是 HTML 文档,版本4.0。字符编码方式为 “ISO-8859-1“,输出会进行缩进,以增进可读性

47、:. . ,4.3.3.11 xsl:variable元素,xsl:variable的语法是:xsl:variable元素用于声明局部或全局的变量。如果被声明为顶层元素,则该变量是全局的,而如果在模板内声明,则变量是本地的。一旦设置了变量的值,就无法改变或修改该值。可以通过xsl:variable元素的内容或通过select属性,向变量添加值。使用变量时需要使用符号“$”,具体格式:$变量名称。xsl:variable元素有两个属性:name:是必需的属性。用于规定变量的名称;select:可选。定义变量的值。,如果设置了select 属性,xsl:variable元素就不能包含任何内容。如果

48、 select 属性含有文字字符串,则必须给字符串加引号,例如,下面的例子为变量 “color“ 赋值 “red“:如果xsl:variable元素只包包含 name 属性,且没有内容,则变量的值是空字符串,例如:下面的例子声明名为“flower”的变量。这个变量的值被赋为当前元素的color属性的值。如果当前元素没有color属性,则变量color的值被赋为“red”:red以上介绍了XSLT几种主要元素的使用方法,XSLT中还有很多其他的元素,例如:xsl:import、xsl:include、xsl:number、xsl:param等,在这里不一一解释。,4.3.4 XPath简介,在利

49、用XSLT进行转换的过程中,匹配的概念非常重要,进行节点匹配时需要大量用到XPath表达式,XSLT就是使用XPath对XML文档中的具体部分进行访问和引用的。XPath是一种用于在XML文档中导航的语言,掌握XPath是学习XSLT的关键,本节将简要介绍XPath的相关知识。,4.3.4.1 什么是XPath,XPath是一种W3C标准,于1999年11月16日发布,它是一种在XSLT和XPointer中都采用的、用于定位XML文档部分内容的语言。和XSLT一样,XPath把XML文档当成一个节点树来进行定位和处理,元素、文本以及属性等都是XPath中的节点。XPath使用路径表达式在XML

50、文档中进行导航并选取XML文档中的节点或者节点集。这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似。此外,XPath包含一个标准函数库,含有超过100个内建的函数,这些函数用于字符串值、数值,日期和时间比较、节点和QName处理、序列处理、逻辑值等等。XPath 是XSLT标准中的主要元素。如果没有 XPath 方面的知识,就无法创建XSLT文档。,4.3.4.2 XPath相关术语,(1)节点(Node)由于XPath是对XML文档节点树的一系列操作,因此明确XPath节点类型是很有必要的。本书第二章介绍了XML文档的逻辑结构,一个XML文档可以包含元素、CDATA、注释、处理

51、指令等逻辑要素,其中元素还可以包含属性,并可以利用属性来定义命名空间。相应地,在XPath中,将节点划分为七种节点类型:元素、属性、文本、命名空间、处理指令、注释以及根节点(或文档节点)。 根节点(Root Node)根节点是一棵树的最上层,根节点是唯一的。树上其它所有元素节点都是它的子节点或后代节点。对根节点的处理机制与其它节点相同。在XSLT中对树的匹配总是先从根节点开始。 元素节点(Element Nodes)元素节点对应于文档中的每一个元素,一个元素节点的子节点可以是元素节点、注释节点、处理指令节点和文本节点。可以为元素节点定义一个唯一的标识id。元素节点都可以有扩展名,它是由两部分组成的:一部分是命名空间URI,另一部分是本地的命名。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报