• 热门标签

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

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

点。
首要的任务是告诉X S LT引擎所期望的输出。在这个例子中,希望是一个H T M L的结果,指
出使用:
像一个处理器一样,了解期待的输出格式,你将从源文档树中的根节点开始。然后在样式表中
匹配根节点,找到相对应的模板。注意,根节点是文档的节点,不是第一个元素。在这个例子
中,根节点不是< C a t a l o g >元素,而是X M L文档本身。那么,我们有一个匹配文档根的模板吗?
回答是肯定的。如果你还记得在上一章X P a t h部分,一个文档的根也可以表示为一个“ /”符号。
这一点我们看到在第一个模板中很明确:
程序清单9 - 9
所以,你已经找到了匹配源文档中根元素的模板了。现在要做什么?为了更好地表示在
X S LT处理器的头部发生了什么,想象一个游标航行于初始的X M L文档节点树;它的位置是当前
节点,现在当前节点是根元素。
第1步:你已经定位了当前游标在根节点处,并且在X S LT命令中发现了一个相匹配的模板。
模板有一个“ /”模式。所以,输出下面的结果。记住,我们工作于一个抽象的树状命令中,表
示出来就是图9 - 6中左边的部分:
322使用XML 高级编程
下载
图9-6
在第一个模板的中间,嵌套在< B o d y >元素间的是一个< x m l : a p p l y - t e m p l a t e s / >命令。这就是
我们将书写内容的页面。它有一个叫做s e l e c t的属性,它的值是一个X P a t h表达式。这个命令的
意思是:
“从X P a t h的查询“/ / B o o k”中,得到一个节点列表。然后,对于这个节点列表中的每个节点,
试着匹配一个模板。如果一个匹配找到了,则应用模板。”
但是“/ / B o o k”是什么意思?它的意思就是“选择从根节点派生出的< B o o k >元素”。
第2步:更深一步地进入我们的X S L文件中,找到一个匹配< B o o k >元素( < x s l : t e m p l a t e
m a t c h = " B o o k " >)的模板,所以下一步我们就应用这个模板给节点列表中的第一个< B o o k >元素。
我们的当前游标现在在第一个< B o o k >节点上。
第3步:我们然后插入与< B o o k >匹配的模板内容到<apply-templates select="//Book"/>命令的
位置处。首先我们加入缺省的C S S样式属性给书的数据—任何更深一层的元素不包含特定C S S
样式属性将继承这些属性。接下来,我们找到另一个< a p p l y - t e m p l a t e s / >,这次使用了一个
“Ti t l e”的s e l e c t属性。根据第一步的规则,我们知道这个要求命令一个< Ti t l e >节点的集合。然
而,这一次当前节点是第一个< B o o k >节点,并且我们的X P a t h表达式指示了,新节点将只包含
当前子节点中的< Ti t l e >节点。这就意味着我们的节点集将由第一个< B o o k >节点的< Ti t l e >子节点
组成。
从这里我们开始看到了所使用的X P a t h表达式的多功能性。如果打算替换成< x s l : a p p l y -
templates select=“/ / Ti t l e”/ >用于存在的节点,节点集中将包含所有从根节点(< B o o k >节
点的根节点)继承下来的<Title>—这将意味在树林中的所有<Title>节点(参见图9-7)。
图9-7
第4步:接着我们试图匹配一个模板针对于我们的节点集中< Ti t l e >节点。再一次我们找到了
第9章转换XML使用323 下载
一个匹配:<xsl:template match=“Ti t l e”>模板。然后在<xsl:apply-templates select=“Ti t l e”/ >
命令的位置插入这个模板的内容。
第5步:< Ti t l e >匹配模板的内容由一些C S S样式属性和一个<xsl:value-of select="."/>元素组
成。这个命令取出通过s e l e c t属性指定的节点的值。在这个例子中, X P a t h是“.”,意思是< Ti t l e >
节点本身,所以我们输出< Ti t l e >节点的内容(参见图9 - 8)。
图9-8
第6步:现在对于在< B o o k >中创建的节点集,对所有的节点使用了与之相匹配的模板。所以
移动到最先创建的节点集中的下一个节点—是第二个< B o o k >节点。采用与第一个< B o o k >节点
同样的方法,所以我们重复执行第四和第五步。循环进行处理,直到所有的< B o o k >元素都被处
理完毕。
在这个处理过程中,我们不仅仅将一个X M L文档从某种文档格式转换到另一种,而且在处
理中也执行一些编辑—只有< B o o k >和< Ti t l e >元素被转换了。而且,转换不只是一到一的转换。
对于初始文件中的每个元素,在结果文档中都可能有一个以上的元素。
我们应该在这里注意一些重要的事情。与< Ti t l e >相匹配的模板没有在结果树中插入元素,
它插入的是文本节点。如前所说,一个树林是一种内部分级命令。当X M L文档转换成这种分级
命令,我们转换文本文档为树形模型。在这棵树中, 孩子元素也是树的子节点。数据内容也是
一个子节点。例如, < B o o k >元素包含一个< Ti t l e >元素,这个< Ti t l e >元素不包含元素,但是包含
数据内容,它变成一个子节点。
那么,当假装是一个X S L引擎时我们学到了什么?
• 首先是我们创建了一个树林,它是文档的一种内部树形表示。这个树林总是有一个根元素。
根元素表示X M L文档—它不是文档的顶层元素。然后,在根元素的下面是节点层次。每
个节点都被打印出来。例如,一个节点可以表示一个D T D、模式或一条处理指令。如果一
个元素有属性,那么每一个元素也有一个属性节点的集合。如果一个节点有数据内容,那
么数据内容被加到元素节点中。因此,一个元素节点可能有一个属性节点的集合和一个数
 
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:XML高级编程上(109)