• 热门标签

当前位置: 主页 > 航空资料 > 计算机 >

时间:2010-08-09 13:16来源:蓝天飞行翻译 作者:admin
曝光台 注意防骗 网曝天猫店富美金盛家居专营店坑蒙拐骗欺诈消费者

如同第9章中提到的,一个使用D O M的X S L处理器生成三个树:
• 一个源树,包含有待解释的X M L源文档。
• 一个包含X S L样式表的树。
• 一个结果树,用来操作结果文档。
当遇到一个显式或隐式的a p p l y - t e m p l a t e命令时,处理器将为树上包含样式表的每一个模板
在源文件树上找到一个匹配的结点。当进行这项匹配时,模板的内容作为写往输出树的结果的
基本内容。例如,如果目标是解释浏览器中的文档,那么模板中有可能包含H T M L命令。对于打
印设备,输出将是X S L格式对象,X S L格式对象可以用X S L的打印格式转换成图形对象,其中打
印格式化器前面已经提到过,如F O P,能够生成P D F对象。
13.3.7 用XSL解释XML
在这一部分里我们将讨论如何把作为范例的X M L图书目录转换成H T M L格式、用V O X M L标
记的语音格式以及用P D F的视觉表示格式。我们在第9章中详细讨论了用X S LT转换X M L文档的
过程,所以这一部分将集中于如何将X M L文档显示给用户,而不是转换过程。
在下面3个例子中,我们使用下面的X M L文档:
程序清单1 3 - 3 1
594使用XML 高级编程
下载
那么我们以这个X M L文档的H T M L版本开始,这个H T M L样式是用于浏览器的。
1. 一个带H T M L可视解对象的X S LT样式范例
我们在第9章中已经讨论过了用X S LT生成X H T M L文档,这个过程主要是格式转换。下面我
们将再简单讨论一下H T M L文档的生成。用X S L将X M L转换成H T M L很简单,这项技术可以用
在服务器上,使服务器支持那些不能读X M L文档的客户端,从而解决了C S S的固有问题之一
─只能在支持X M L的浏览器上解释X M L。
X S L的一个有趣特征是它能以不同的顺序解释文档的元素(我们在转换一章中已经讨论过)。
例如,在下面的例子里,即使元素< T I T L E >不是元素< I T E M >的第一个子元素,通过X S LT的转
换功能它也可以最先显示。下面是一个叫b o o k l i s t . x s l的例子:
程序清单1 3 - 3 2
第13章样式XML使用595 下载
上面的X S LT样式表可以用IE 5测试,在样本X M L文档中<?xml version = "1.0"?>后面加一个
处理命令。如果你在文件b o o k l i s t . x m l中输入如下处理命令:
程序清单1 3 - 3 3
IE 5将会显示如图1 3 - 1 8所示结果。
注意虽然这个样式表在IE 5中有效,但它所支持的X S L版本同现在讨论的工作草案并不一样,
上例也是根据这个工作草案编写的。下面,我们来看看这个样式表的作用。样式表文档由一系
列模板构成,每个模板用标志< x s l : t e m p l a t e >开头,以标志< / x s l : t e m p l a t e >结束。x s l :部分是X S L
的命名空间,用于防止应用处理程序将< t e m p l a t e >标记和特定X M L词汇表中使用的具有相同名
字的其他元素相混淆。所有的X S L元素都使用这个命名空间标识。
第一个模板元素使用了m a t c h属性, m a t c h属性指定模板适用的元素。这是一个可选项。在
596使用XML 高级编程
下载
这种情况下,选项的值是X M L文档的根元素,用正斜杠表示:
图13-18
程序清单1 3 - 3 4
这实际上是一个X P a t h表达式,同X P a t h工作草案中的一样。
在这个模板中,我们开始生成结果H T M L文档,然后跳到xsl: apply-templates命令:
程序清单1 3 - 3 5
上面代码段落中最后一行的命令用来执行在此指定的任何其他模板。X P a t h 表达式
“B O O K L I S T / I T E M”在这里表示元素< B O O K L I S T >的子元素< I T E M >的任何模板都会被匹配。
如果你看看第一个模板的剩余部分:
程序清单1 3 - 3 6
可以看到我们希望在关闭H T M L文档以前写下H T M L元素的剩余部分。这样,当处理器执行到<
x s l : a p p l y - t e m p l a t e s / >元素时,就知道要将所有其他模板的内容插入到这个位置上,并用模板的
内容替换X S L命令。
第二个模板同所有的< I T E M >元素匹配(像t e m p l a t e元素的m a t c h属性指定的一样),这些元
素在原始X M L文档中用a p p l y - t e m p l a t e s命令选定:
第13章样式XML使用597 下载
程序清单1 3 - 3 7
首先应该显示< T I T L E >元素,即使在原始文档中< T I T L E >元素是< I T E M >元素的第四个子元
素。为了显示< T I T L E >元素,要执行与这个元素匹配的模板。< T I T L E >的模板实际上位于样式
表的底部:
程序清单1 3 - 3 8
这个模板包括了用C S S特性建立起来的一个< D I V >元素。这个< D I V >元素包含一个单独的
< S PA N >,< S PA N >的内容用元素<xsl: value-of/> 设定为同元素< T I T L E >的内容一样。< x s l :
value-of select = "."/>可以有效地提取匹配s e l e c t属性的元素的值。当" . "作为s e l e c t属性的一个值
时,它表明我们想选择当前匹配结点的值(这里是元素< T I T L E >的内容)。因此,整个模板生成
了我们显示模块的第一行(同本章中的其他例子采用完全相同的样式)。
执行过这个模板后,处理器将继续执行最后一个模板的剩余部分,从最后一个模板中
< a p p l y - t e m p l a t e s / >被调用的地方开始执行。
程序清单1 3 - 3 9
这个模板的其余部分生成一个< D I V >元素─不是在另一个模板中,而是在同< I T E M >元素
相匹配的模板中。这个最后的< D I V >元素包含内嵌H T M L元素(如< S PA N >)。一些H T M L元素只
是插入输出结果的字符串,另外一些则是由<xsl: value-of / >命令生成的:
598使用XML 高级编程
下载
程序清单1 3 - 4 0
这里< S PA N >是提取元素< C AT E G O RY >中的数据内容(值)而生成的。在这之前,我们对
 
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:XML高级编程下(31)