• 热门标签

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

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

程序清单9 - 4 2
所以,J a v a S c r i p t中包含排序对象的行变成:
s e l e c t S i n g l e N o d e ( )返回的是属性节点,不是元素节点。每一个有一个或多个属性的元素,在
文档树中,被转化成有一个或多个属性子节点的元素节点。所以, a t t r i b N o d e变量包含的是属性
节点对象。
接下来,我们通过标题的顺序来排序和显示条目:
使用s o r t ( )函数:
程序清单9 - 4 3
首先,属性节点对象的值设成了' T I T L E '字符串。实际上,这个有效地修改了扩展D O M。所
以这里代替用X S L修改X M L文档,而是使用扩展D O M—在运行时, X S L样式表可能被扩展
D O M和一段相应的脚本修改。
第二行需要更多的解释。首先,你可能会自问, B o o k l i s t对象是从哪里来的。这个对象是在
X S L脚本中使用下面的命令创建的:
352使用XML 高级编程
下载
如你所见,当创建一个< D I V >元素时,我们就创建了一个名为B o o k l i s t的唯一标识对象。这
是一个H T M L元素,用来接收X M L到H T M L转换的结果。所以,当下面的表达式被J a v a S c r i p t解
释器执行时:
我们对初始的X M L文档中的d o c u m e n t E l e m e n t对象调用了t r a n s f o r m N o d e ( )方法。这是一个
X S L的扩展D O M,用来排序x s l S t y l e s h e e t变量。然后,结果被排序放在B o o k l i s t对象的
i n n e r H T M L属性中。这个会引起H T M L文档的刷新,从而造成显示刷新。然后排序后的表显示在
屏幕上(见图9 - 2 5)。
图9-25
表头被设置了C S S样式,用于指示每次光标在表头时,浏览器显示出一只小手。用户习惯于
在可被点击的东西上定义一只小手。每一列的表头都同一个s o r t ( )函数相联,在这个例子中,行
为就像o n C l i c k事件的事件处理器。例如,如果用户点击了P r i c e列,那么排序函数被调用,使用
< o n c l i c k = " s o r t ( ' P R I C E ' ) " . . . >命令。s o r t ( )函数接收‘ P R I C E’字符串作为一个参数,设置为
a t t r i b N o d e变量的值。实际上,这个就改变了X S L样式表。改动等于将下面的命令:
替换成:
同最初的X S L样式表。在X S L扩展D O M已经被修改完毕,我们再一次地转换了初始的X M L
文档,使用改过的X S L样式表,并且将这个转换的结果作为HTML Booklist对象(如此命名是因
为< D I V >的i d)的i n n e r H T M L属性的输入。
所以,因为X S L文档被转换成一个树状命令(因为扩展D O M是对这棵树提供的接口),就可
能使用这个接口修改X S L脚本。被修改的X S L脚本然后可以对原始文档执行一个不同的转换。所
以,为了得到基于用户交互的不同结果, X S L脚本可以在脚本语言中被修改。
9.6 XSL转换与DOM转换的比较
X S L与D O M转换处理的一个最主要的不同之处是, X S L是一种公布语言,而不是过程语言。
第9章转换XML使用353 下载
因为这样, X S L描述的是转换后的文档状态与初始文档的关系。D O M则是一种A P I,它允许对
树状命令进行操作。
我们看到前面WSH VBScript使用D O M来达到与我们使用X S LT样式表同样的转换结果。但
是我们可以说,更精细的转换引擎(由D O M 1或D O M 2规范所命令的)比X S LT来说限制更多。
这主要是因为, D O M 1和D O M 2规范没有集成X P a t h表达式合并为到达一个特别的树状命令节点
的能力。所以,在某种条件下,用D O M来转换X M L文档要比使用X S LT要困难得多。如果未来
的D O M规范版本包括了通过X P a t h表达式到达一个特别节点的能力,那么使用D O M可能像使用
X S LT一样容易和有效。
如同我们在其他的D O M使用的例子中看到的,一个X S LT样式表可以转换一个X M L文档为
H T M L。结果的H T M L文档可以包含脚本,用于在后面操纵内容的树状命令。脚本过程可以通过
用户的动作被触发,并且这些脚本可能包含使用DOM API的代码来操纵与初始的X M L文档相关
的X S LT文档。这就是我们所做的,当用户在一个表头点击时,我们改变一些X S LT元素的值
(存储的值),来对这个列进行排序。在这个例子中, D O M用于改变X M L元素的属性值,并且由
于X S LT本身也是一个X M L文档,它也可以使用DOM API进行修改。这时, D O M通过提供排序
向X S LT转换加入值,而不必在脚本中包括排序代码。
总之,我们可以说在实际的技术状态中, X S LT样式表可以做得比使用DOM API脚本更易移
值。就像在开始看到的—现实的D O M 1和D O M 2规范不包含任何装入和保存X M L文档的命令。
因为所有这些原因,最好使用X S LT样式表来进行转换,而不是使用包含D O M命令的脚本。
9.7 小结
在这一章里,我们已经看过了转换X M L文档命令。特别是,我们花费了大量时间关注于
X S LT(X S L转换)上。这需要X P a t h和X P o i n t e r的知识,在第8章已经学过了。
我们看到有几个为什么需要转换X M L文档的原因。这些包括:
• 将X M L转换为一种表式语言。
• 在X M L的不同词汇表中进行转换。
• 生成动态文档。
X S LT实际上是一个巨大的专题,希望这一章能够让你习惯于这个特别规范的语法。而且关
于这个题目很可能将被写成一本书(的确,留意一个Wr o x出版社的《X S LT Programmer’s
R e f e r e n c e》,ISBN 1-861003-12-9),这个将让你习惯可用的全部功能,并且在写你自已的转换
样式表时提供一个坚实的基础。
由于在X S LT规范完成之前,在I E 5中可用的实现就被介绍了,所以它们有一些不同,包括一
些扩展。然而,也有一些可以用在你的应用程序中的X S LT处理器:
• XT - http://www. j c l a r k . c o m / x m l / x t . h t m l。
• SAXON - http://users.iclway. c o . u k / m h k a y / s a x o n。
 
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:XML高级编程上(116)