• 热门标签

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

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

板。
第一个节点同文档的根相匹配:
程序清单9 - 1 8
X M L文档可以与样式表相关联,使用一个<?xml-stylesheet ...?>处理指令。我们想让文档与
一个C S S样式表相关联,所以不得不写在模板中以便让命令文档中包含处理指令。
为了在结果树中创建处理指令,我们使用一个特别的X S L命令,< x s l : p r o c e s s i n g - i n s t r u c t i o n >
元素。n a m e属性提供了处理指令的名字,数据内容为其他所有的属性。所以下面的X S L元素:
第9章转换XML使用331 下载
被转化为命令树为:
包含在模板中的其他< B O O K L I S T >元素将被插入到结果树中。现在熟悉的< a p p l y - t e m p l a t e s >
命令指示X S LT处理器应该处理所有的子元素,由于没有一个选择标准—子元素将被处理成当
前节点的子节点—然后,这些节点将同模板进行匹配。如果一个包含数据的孩子没有一个匹
配的模板,它被插入到结果树中。否则,如果同一个模板相匹配,模板被处理,并且它的内容
将包含在结果树中。
你可能已经注意到,没有模板匹配< B O O K L I S T >元素。X S LT引擎有一个隐含的模板用于匹
配任何一个没有明确指定模板的元素。这个模板允许递归处理,用于处理与模式相匹配的没有
明确定义模板的元素。这个隐含的模板被定义为:
所以< B O O K L I S T >元素,它没有一个明确定义的模板规则,与隐含的模板相匹配。这个隐
含模板也可以叫做缺省模板。
< B O O K L I S T >元素包含< I T E M >元素,对于它存在一个模板。实际上,这是一个我们想重新
组织的元素。重新组织< I T E M >元素相当容易,我们只是包含了按照需要排列的元素。如果不得
不加入新的元素,只需简单地在模板中包含它们。
我们使用< x s l : a p p l y - t e m p l a t e s >命令与用在第一个模板的颇为不同。在前面我们使用s e l e c t属
性来指示X S LT引擎,只有与选择标准匹配的元素使用明确的模板,否则使用缺省的模板。
下面的表达式在输出树中包含了初始X M L文档的< T I T L E >的数据内容。
s e l e c t属性的X P a t h表达式用来指示X S LT引擎, < T I T L E >元素的文本节点的内容将插在
< x s l : a p p l y - t e m p l a t e s >命令所在的相同地方(参见图9 - 11)。
图9-11
注意这里是与< I T E M >元素相匹配的模板,因为< T I T L E >元素的节点是它的孩子,正确的表
达示应该是“T I T L E / t e x t ( )”。如果我们使用“/ / T I T L E / t e x t ( )”来代替,所有< T I T L E >元素的内容
将会如下被插入到结果树中:
332使用XML 高级编程
下载
当前节点当前节点指针指向
<ITEM>节点。表达
式“TITLE/text()”
仅与一个子节点匹配
这是因为加入“/ / T I T L E”意味着“处理所有从根节点继承的节点(对于元素类型),名字为
< T I T L E >。”注意, X P a t h表达式“ . / / T I T L E / t e x t ( )”意思是“处理所有从当前选中节点继承的名
字< T I T L E >的节点”。在/ /前加.则意思就完全不同了(参见图9 - 1 2)。
图9-12
所以,包含在模板中的匹配< I T E M >节点的所有<xsl:apply-template select ...>命令都是相对
于当前选中节点的。在我们的例子中,这就是< I T E M >节点。当前节点的游标通过模板的匹配属
性移动到< I T E M >元素:
程序清单9 - 1 9
第9章转换XML使用333 下载
当前节点
当前节点指针指向
<ITEM>节点,表
达式“TITLE/text()”
与根节点下名称为
<TITLE>的所有
<ITEM>子孙节点
匹配
像前面我们看到的,有一个可替换的方法来从初始X M L文档中提取正确的信息。如下面举
例所示,所有< x s l : a p p l y - t e m p l a t e s . . . / >命令的地方被<xsl:value-of .../>命令所替换:
程序清单9 - 2 0
我们看到了有两种方法在正确的地方插入正确的元素:
• 使用< x s l : a p p l y - t e m p l a t e s >命令。
• 使用< x s l : v a l u e - o f >命令。
我推荐使用第二个命令—< x s l : v a l u e - o f >—它明确地告诉我们是被选节点的值插入到输
出树中去。你可能已经注意到,我们在选择表达式中没有包括“ t e x t ( )”指令,因为元素的值就
是它的数据内容。
新的数据内容也可被加入到输出内容中。例如,我们想在结果数据的开始处包含C a t e g o r y :
表达式,这样我们可以得到像这样的代码:
再一次,我们使用< x s l : v a l u e - o f . . . / >命令,它被< C AT E G O RY >元素的内容所替换,但是我们
也加入了文本C a t e g o r y(参见图9 - 1 3)。
使用X S LT转换文档格式在大多数场合是非常重要的。为了以适当的方式显示X M L文档,我
们使用X S LT转换成另外一种格式。当在结果文档里使用相同的标签时,我们插入内容,从模板
中使用< v a l u e - o f >或者< a p p l y - t e m p l a t e s >命令获得源文档数据元素,自己写进元素中去。我们很
容易地创建新的标签,文档能被转换成一个完全新的词汇表。我们能够使用以前的例子(在第2章
334使用XML 高级编程
下载
曾经介绍过)转换这个文档成词汇表。
图9-13
这种技术能完美地将文档转换成表示语言,例如HTML, WML(Wireless Markup Languages)。
当我们以不同的X M L命令交换信息时,这对于转换不同的内容是非常有用的。例如,当我们转换金
融数据的时候,一个公司使用F P M L ,另一个公司使用F i n X M L ,我们能在两者之间转换。
 
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:XML高级编程上(112)