曝光台 注意防骗
网曝天猫店富美金盛家居专营店坑蒙拐骗欺诈消费者
< P r i c e >都是< B o o k >的孩子,并且< C a t e g o r y >是< B o o k >的孙子,是< R e c S u b j C a t e g o r i e s >的孩子。
这就是为什么我们说,这个抽象的树状命令是一种独立于处理它的A P I的一种模型(正如W 3 C的
D O M),并且这种命令是X S L处理器所使用的,用于选择命令中的相应部分。X P a t h是一种语言,
用于处理树中的任何元素。
314使用XML 高级编程
下载
图9-2
2. XSL处理器如何转换源文档
正如我们所说, X S LT操作的是文档的模型而不是语法。源和目标格式都是X M L的应用,并
且两个的分级命令都是一棵树。另外X S L样式表是一个X M L文档,所以它也可以用一棵树来表
示。所以, X S LT处理器一共有三棵树。
X S LT是一种公布的语言,意思是你来指定结果的显示,胜于说它如何被转换,并且这就是
为什么我们使用X S L处理器来做这件工作。X S L样式表是由模板组成,它指定了源树中的每个节
点在结果中应如何显示。
图9 - 3说明了处理器是如何工作的。
图9-3
第9章转换XML使用315 下载
元素节点
属性节点
值节点
样式表XSL
XSL 引擎
结果节
点树
指令执行
样式单节点树
(模板)
源节
源点树
图例
源节
点
样式表结
果节点
样式表指
令节点
非
XML
XML
格式化的
对象
格式化的
对象
结果
在这里面我们可以看到有三个命令。记住源和结果命令都是文档的抽象表现。处理器遍历
源树林,从根开始,查找与在样式表中模板相匹配的节点。当找到一个,它使用在模板中的规
则在结果树中写出结果的抽象表示。然后,在源文档中继续移动,一个节点接着一个节点,根
据前导的X S LT指令< x s l : a p p l y - t e m p l a t e >,在样式表中查找相应的匹配。如果没有可匹配的模板,
它就移动到下一个命令。我们可以说它执行一个缺省模板,不输出任何结果。然后,结果树被
转换成一个X M L文档、文本、H T M L文档或希望的结果。
这个,在理论上可能会发生。但是也有不同的变化关于如何建立X S LT引擎。X S LT引擎可能
被优化,并且样式表可能不再需要被存储为树林或树状命令。然而,这给出了它们行为的一般
的方法。
在浏览过一个X S L处理器为了执行它的转换是如何工作之后,你将需要确认在机器上已经安
装了这个章节的例子。有不同的方法来实现一个X S L处理器,让我们看一下其中的两个:
• M S X M L—M i c r o s o f t的X M L解析器,有一个D O M接口,以D O M组件的形式包括了一个
X S LT引擎。包含在I E 5中M S X M L引擎与推荐的相比已经相当过时了。技术预览版则更新
一些。
• X T—James Clark的致力研究的X S LT引擎。它是用J a v a编写的,所以可以跨越平台。从
最新的X S LT规范的一致性来说X T要更新一些。
MSXML XSL处理器M S X M L不只是一个解析器,它还包括了一个X S L处理器。M S X M L
同I E 5高度集成,但是也可以做为一个独立的C O M组件,可从h t t p : / / m s d n . m i c r o s o f t . c o m / x m l得到,
用于应用程序的集成。这个组件使用D O M来操作X M L文档的抽象树状命令。因为这样,它可以
被接口化用在像J a v a S c r i p t、D e l p h i、Visual Basic 、Vi s u a l C O B O L、V B S c r i p t、P e r l S c r i p t、
P y t h o n S c r i p t、C + +等语言中。这个组件要求至少系统中有I E 4或以上版本存在,因为M i c r o s o f t的
X S LT引擎需要一些它提供的其他的D L L。
最初的D O M接口被定义成使用C O R B A接口定义语言(I D L,Interface Definition Language),
但是M i c r o s o f t的组件技术C O M使用不同的I D L,所以M S X M L组件接口是用COM IDL来定义的。
不过, M i c r o s o f t的D O M实现,考虑了推荐的精神,在对象接口中保留了同样的方法名。接口
I X M L D o c u m e n t是相当于W3C DOM一级d o c u m e n t接口。W3C document接口从n o d e接口派生,
很像I X M L D o c u m e n t接口从I X M L N o d e接口派生而来。I X M L D o c u m e n t接口已经被扩展,包含了
针对X M L文档解析及转换的额外方法。
例如,下面的A S P脚本用于M S X M L组件的I X M L D o c u m e n t接口来解析要转换的X M L文档和
X S L样式表。然后,它将分析过的源X M L文档进行转换,通过使用分析过的X S L转换表:
程序清单9 - 4
316使用XML 高级编程
下载
使用M S X M L转换文档的一般机制是:
• 装入要转换的初始文档。l o a d ( )方法同时会解析文档,以便文档作为一棵树状命令被保存
(像我们在前面看到的一样)。
• 装入X S LT文档。l o a d ( )方法再一次解析文档并将其转换成树。
• 使用t r a n s f o r m N o d e ( )函数进行转换。这个函数返回一个字符串(一个B S T R)。在返回字符
串中包含了转换后的文档。所以,如果X S LT转换表包含一个从X M L到H T M L转换的话,
保存在结果串中的文档就是一个H T M L文档。
• 集成在M S X M L组件中的组件有。
• 一个X M L解析器。
• 一个扩展的D O M一级树状接口。
• 一个X S LT转换引擎。
XT XSL处理器X T是另一种流行的X S LT处理器;由James Clark组写,易于使用并且可以
从作者的主页上自由下载,网址是: h t t p : / / w w w. j c l a r k . c o m / x m l / x t . h t m l。它使用J a v a编写,并且
已经在几种J a v a虚拟机上被成功地测试。对于Wi n 3 2平台,可以下载一个单一的执行码,并且它
要求在机器上安装了M i c r o s o f t的J a v a虚拟机。这个处理器将有助于实验这一章中所介绍的不同
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:
XML高级编程上(107)