曝光台 注意防骗
网曝天猫店富美金盛家居专营店坑蒙拐骗欺诈消费者
< x s l : o u t p u t >元素:
326使用XML 高级编程
下载
程序清单9 - 1 0
9.3.4 合并样式表
一个重用代码的方便方法是创建模块。然后,这些模块可以被用在其他的模块中—X S LT
可以包含或导入外部的样式表。有两种命令可以达到这个效果:
• <xsl:include>元素
• <xsl:import>元素
1. xsl:include
< x s l : i n c l u d e >元素只是简单地允许我们包含一个外部的样式表,在定义< x s l : i n c l u d e >元素的位
置处。通过U R I所指出的X S LT文档首先被解析,然后被包括文档的< s t y l e s h e e t >元素的子元素替换
需要替换文档的< x s l : i n c l u d e >元素。有必要将< x s l : i n c l u d e >命令定位成< s t y l e s h e e t >元素的子元素:
程序清单9 - 11
2. xsl:import
< x s l : i m p o r t >与< x s l : i n c l u d e >有很大不同—< x s l : i n c l u d e >只是表示执行一个文件包含,但是
< x s l : i m p o r t >修改文档树。实际上, < x s l : i m p o r t >命令修改模板的顺序和优先处理。
最重要的是,这个元素应该放在其他顶级元素的前面—它应该是< x s l : s t y l e s h e e t >元素的第
一个子元素。
首先,所有被输入的样式表被当做文本被包含。一但它们都被收集完毕,将被用于生成一
棵输入树。所以,每一个被输入的样式表都被包含在宿主样式表的输入树中。这就可以让被输
入的样式表自己再输入其他的样式表。
例如,b o o k l i s t . x s l样式表可能输入一个像这样的样式表:
程序清单9 - 1 2
现在,让n e w B o o k s . x s l输入其他的样式表:
程序清单9 - 1 3
第9章转换XML使用327 下载
然后,合成的输入树看上去应该如图9 - 1 0所示。
这就形成了一种命令,它指出一个样式表可以优先于另一
个,B o o k l i s t . x s l的优先权要高于其他两个。当模板与元素相匹
配时, B o o k l i s t . x s l首先被处理,然后是N e w B o o k s . x s l,最后是
r e c e n t . x s l。< x s l : i m p o r t >命令直接影响了样式表的处理。X S L文
档树通过这个元素被修改,并且样式表被组装进了单一单元
—输入树。
9.3.5 嵌入样式表
一个样式表不必是一个分离的文档。它能够被嵌入到另一个X M L文档中。例如,一个动态
命令的X M L文档可能在转换给用户机构之前包括它的样式表,一个X S L样式表被嵌入到X M L文
档中:
程序清单9 - 1 4
这里,样式表被包含在X M L文档中。通过一个X M L(用#号所指) i d指出,所以X S L处理器
知道样式表是在文档中的特殊片段,通过一个元素中的i d属性定义的。X S L处理器将然后从文档
中提取出样式表片段,分析它,并且为X S L处理器命令内部命令。X M L文档本身被解析,但是
结果的文档树并不包含样式表。所以,从一个单一的X M L文档,用户机构得到两个文档命令:
• 一个用于X M L文档的树林,不包括< x s l : s t y l e s h e e t >元素(它包括了整个样式表)。这个命
令可以用D O M处理。
• 一个X S L文档,只包括< x s l : s t y l e s h e e t >元素和它的内容。这个命令可能是也可能不是一个
树林,可能也可能不被D O M处理。
9.4 使用XSLT的例子
如你所见,X S LT是一个有力的工具,通过一种命令或文档类型,来转换X M L文档为一个新
的文档—如将一上X M L文档翻译成X H T M L。我们已经看过前面教给X S LT处理器如何工作的
例子,看过了一个引用部分,解释了对于在X S LT中最常使用的元素,这一章的第二部分将看一
些例子,关于在不同的环境下使用X S LT。这些将包括:
328使用XML 高级编程
下载
图9-10
• 命令的转换,从一个X M L词汇表到另一个。
• 使用循环重复处理元素—x s l : f o r- e a c h。
• 对需要处理的元素排序。
• 使用x s l : i f和x s l : c h o o s e进行条件处理。
• 创建动态文档。
9.4.1 命令的转换
让我们看一个例子,是将一个X M L文件改成另一种X M L命令,不单是X H T M L。比方说,
我们需要重新排序一个同事给你的X M L文档的元素,像下面:
程序清单9 - 1 5
情况良好,但是他也给你增加了一些调料,给你提出了一些需求:
• 文档应该输出到能够通过C S S样式表来表现X M L的浏览器上。
• 每一项(指书)必须作为一个块显示。
• 每个标题要首先显示(在块中)。
• 分类和代号应该显示在同一行上,但是分类要显示在前。
• 每块的最后一行应该包含发行日期,接着是价格。
并且,如果不够,他建议< C AT E G O RY >内容应该用“ C a t e g o r y :”字符串显示,并且应该用
圆括号括起来。好,发行日期和价格也应该用一个“ -”分隔开。并且在圣代冰淇淋上加点樱桃,
你只能使用C S S 1样式表。这时候你可能会想这不是你过的日子。但是X S LT正等着帮助你。
那么,你需要做的第一件事情是,为了能够用C S S来格式化文档,要将存在的文档命令转化,
看上去像这样:
第9章转换XML使用329 下载
程序清单9 - 1 6
为了进行转换,我们将使用下面的样式表,稍后将学到很多的细节。它只包括了两个模板。
这个例子可以用X T和S A X O N来执行。为了在M i c r o s o f t的I E上运行下面的模板,你需要一
个比在IE5中提供的MSXML组件更新的版本。
程序清单9 - 1 7
330使用XML 高级编程
下载
在以前的例子中我们看到,源文档首先被转换成一个树林(一个内部分级命令)。在为了处
理将X S LT文档被转换成一种同部命令之后,接着元素进行匹配(也可能不,看例子而定)模
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:
XML高级编程上(111)