曝光台 注意防骗
网曝天猫店富美金盛家居专营店坑蒙拐骗欺诈消费者
成了一个新的Microsoft XML DOM的例子,并将由F o r m TO C . a s p生成的X M L文档加载到其中。
F o r m TO C . a s p页面使用表1 5 - 4中列出的四个全局页面变量。
表1 5 - 4
变量描述
S o u r c e 与A S P执行结果一起加载的XML DOM
S t y l e 包含当前加载的X S L的XML DOM
R o o t 一个指向s o u r c e . d o c u m e n t E l e m e n t的快捷键
S t y l e U R L 查看当前用来解释X M L的X S L样式表
当运行init( )函数时,s t y l e U R L设定为l i s t . x s l,即缺省样式表。在我们讨论如何应用X S L样
式表以前,先来看看X S L本身。
4. 显示H T M L
用一个客户端脚本生成页面是十分有效的,但不足之处是你不能只要在浏览器中点击Vi e w
S o u r c e就能看到H T M L了。如果在页面生成过程中你需要看到H T M L,只要将这个按钮加到页面
上去:
程序清单1 5 - 1 4
15.8 “以编号浏览”XSL样式表
在这里提到的两个样式表中, L i s t B y N u m . x s l是比较简单的一个。它生成了一个表单的清单,
按照表单的编号顺序排列,用< x s l : f o r e a c h >元素的o r d e r- b y属性表示。为了方便,我们在编号后
的括号里显示表格名字。注意编号是如何进入一个与J a v a S c r i p t函数相连的H T M L超链接中去的
(见下面示例):
程序清单1 5 - 1 5
676使用XML 高级编程
下载
生成的带J a v a S c r i p t函数的链接如下(参见图1 5 - 5):
程序清单1 5 - 1 6
图15-5
X S L文档在解释的H T M L中建立U R L,H T M L将选定表的各种信息显示在编辑屏幕上。这个
过程是通过一个调用函数n a v i g a t e To( )完成的。其中表编号作为一个参数传递过去。两个样式表
都生成了同样的调用n a v i g a t e To( )的指令。
这种特性使我们在非描述性网络应用程序中会遇到一点设计上的问题,用户可能从右边的
表单开始编辑图文框的信息,然后没有存储他们所做的修改就移动到另一个表单上去。为了避
免这种情况出现,我们在主编辑图文框中采用了一个布尔标识变量(“d i r t y”)。在这个窗口中的
编辑控制将会把o n K e y D o w n或o n C h a n g e(取决于哪个适用于控制)中的标识设定为t r u e,以此
来标明用户更改过的数据。
s k u是表单的唯一标识符(表单编号不是唯一的),我们用它来浏览各个表单。所有的浏览过程
都是由F o r m TO C . a s p中的n a v i g a t e To( )函数激活的。如同我们刚刚提到的,当X S L文档浏览X M L文
档时,它们建立了调用navigateTo( )函数的超链接,将正在处理的<form>结点的SKU传递过去。
n a v i g a t e To( )函数也用来保证右侧编辑窗口的数据在用户移到另一个表单之前没有被更改,
这项函数是通过检查窗口中d i r t y变量的值来实现的。如果数据没有被改变或用户确认想转换到
其他窗口去, n a v i g a t e To( )函数将会根据传递给它的S K U来加载新的U R L。如果数据被更改了,
我们仅仅是警告用户,告诉他们没有存储修改内容。这就让用户可以选择是放弃修改还是继续,
或者是接着编辑。
程序清单1 5 - 1 7
第15章实例研究1—数据双重性使用677
下载
15.9 “以名字浏览”XSL样式表
这个文件更复杂一些,因为它多了一项form type,而by-number XSL样式表则无须考虑这一
点。实际上,如果回过头来查阅在本例开始时介绍的X M L文档结构,会发现我们正是想要用这
个格式来显示数据的。
在第9章关于转换X M L中已经看到,可以用X S L输出标记甚至H T M L标记。对于现在讨论的
这些数据,我要加上用D H T M L实现的折叠和展开所有的标题这个功能。这个功能只与由l i s t . x s l
生成的by name显示界面有关,因此生成折叠/展开按钮的代码就在l i s t . x s l中,这个模板只在X M L
文档的根部应用一次:
程序清单1 5 - 1 8
上述过程生成了下面的格式化H T M L:
程序清单1 5 - 1 9
678使用XML 高级编程
下载
下一个模板完成了大部分工作。这个模板应用于每个< F O R M S >结点,而你只需要记住表单
的类型。在解释的H T M L中每种表单的类型都成为属于这种类型的一系列表的“父”结点。子结
点用HTML <LI>标识符建立,从而使它们具有明显的显示标志。
同第一个样式表一样,这个样式表也建立了一个调用n a v i g a t e To( )函数的超链接:
程序清单1 5 - 2 0
15.10 激活XSL样式表
讨论过X S L文档后,下面来看看调用X S L文档的函数。
如果按下by name或by number按钮,系统将会调用changeXSL( )函数,其中x s l d o c参数指明
应该用哪个X S L文档解释X M L数据。changeXSL( )将调用在样式变量中保存的XML DOM里的
load( )函数,从而加载X S L文档。如果我们要更换到by name视图,开始时所有的父结点都折叠
在一起:
程序清单1 5 - 2 1
第15章实例研究1—数据双重性使用679
下载
changeXSL( )函数完成所有的工作,我们正是在这里进行的X S L转换。我们读取X M L文档
并用X S L转换它。生成的H T M L字符串被赋给xslresult <DIV>。浏览器将重新解释刚刚被更改的
< d i v >,这个< d i v >将显示X M L文档中的格式化内容。
程序清单1 5 - 2 2
15.11 问题:保持树的同步
上面提出的解决方案如果仅用于浏览效果还很不错,但这是一个维护性应用程序,因此要
用于编辑数据。这意味着X M L文档中的数据可以被更改,而原有的X M L文档被废弃了。
对待这个矛盾有两种解决方法:或者我们得到一份新的数据拷贝,让A S P重新生成X M L文
档,或者我们利用XML DOM的功能更新客户端的X M L文档拷贝。
我选择用客户端脚本来保持客户的X M L拷贝随时更新。我们需要考虑的改变是:
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:
XML高级编程下(53)