曝光台 注意防骗
网曝天猫店富美金盛家居专营店坑蒙拐骗欺诈消费者
• 添加(新表)。
• 删除。
• XML文档中一个或多个域的改变。
要记住先在客户端进行更改,然后更新服务器上的数据,最后我们需要激活客户端脚本来
反映这些变化。Site Server在应用程序中对更改的数据进行了存储后,我们在其上增加了函数调
用指令,使客户端的X M L进行更新。这个过程在e d i t . a s p中完成。
这个设计中有一点风险,因为这是一个非事物系统。有可能发生了对数据的更改,但不知
什么原因没有注意到这个变化。那么我们的X M L数据与基础数据库数据就不会同步了。我认为
在这里这是一个可以接受的风险,因为它发生的可能性很小,而且这个系统也不是一个具有关
键使命的系统,如果非常偶然地出现了数据不同步,问题也可以通过刷新浏览器来“解决”。
为了更新X M L文件我们需要在客户端上添加3个函数,每个函数对应上面列出的一种情况。
add( )和change( )函数接收一个叫o F o r m的J a v a S c r i p t对象,这个对象是为传递表单属性而生成的
(如果你对J a v a S c r i p t不熟悉,可以将函数看作是对象,可以通过简单的赋值向对象添加方法)。
每个o F o r m对象有下列属性:
• FormTi t l e。
• FormNumber。
• SKU。
你会注意到这些属性同我们在X M L中用的一样。更改过的Site Server代码生成了o F o r m对象
并将其作为一个参数传给add( )和change( )函数。
680使用XML 高级编程
下载
addNode( )函数在X M L树上添加一个新表单。它通过复制一个已存在的结点来完成这个过程,
并用我们传递的o F o r m对象中的新值来更新结点。模式匹配字符串/ / F O R M选择第一个< F O R M >
结点:
程序清单1 5 - 2 3
一旦已经有了这个结点,我们通过在表单类型中查找可以找到树中要插入新结点的位置。
如果不能找到相应的位置,就需要生成一个新的分支。有可能发生的情况是:存在一些表单的
类型,但在我们生成X M L时还没有这种类型的表单(例如,在类型表单中有一个A p p l i c a t i o n类
型,但没有表单标识为A p p l i c a t i o n类型的表单)。
当我们确定了插入点以后,将新结点作为那个点的第一个子结点。模式匹配字符串/ / F O R M
[@TYPE = '"+oForm.formTy p e + " ' ]发现带t y p e属性的第一个< F O R M >结点的值为
o F o r m . f o r m Ty p e:
程序清单1 5 - 2 4
addBranch( )函数负责在X M L树中插入一个新的分支。它从对< F O R M S >结点进行复制这样
一个浅层次开始(仅复制一个结点,不复制结点上的子元素),然后我们将T Y P E属性的值设定
为传递来的字符串,并把这个新结点添加到根元素F O R M L I S T上:
程序清单1 5 - 2 5
第15章实例研究1—数据双重性使用681
下载
更新一个结点同添加一个结点很相似,但我们需要考虑和解决一个新的逻辑错误。表的类
型有可能被改变,如果这样的话我们所要做的就不仅仅是更新一个已知的结点,而是要去掉旧
结点并在X M L树中某个新的父结点下重新生成这个结点:
程序清单1 5 - 2 6
最简单的更新函数是删除函数。我们需要做的就是找到要删除的结点将它从树上去掉。模
式字符串/ / F O R M [ F O R M N U M B E R =“‘+ s F o r m n o +’”]表示“找到一个F O R M结点,其子元素
F O R M N U M B E R的值为s F o r m n o”:
682使用XML 高级编程
下载
程序清单1 5 - 2 7
注意当这些函数完成它们的任务后,更新X M L树的函数也调用update( ) 函数,update( )反
过来又重新将当前的样式表用于已经更新的X M L文档。
15.12 小结
在这个实例研究中,我们用X M L为终端用户提供了一个强化的功能界面,而这是用过去的
技术所无法实现的。
我们面临的问题是:产生的用户界面要允许用户用两种标识符中的一个─名字或编号来
浏览同一部分数据。我们将数据作为X M L送到客户端一次,而不是每次想改变浏览方式时都要
与服务器进行数据交换,然后由客户端根据我们的需求用X M L生成想要的显示方式。
我们也允许用户更新他们正在浏览的数据─这些更新不仅仅在客户端生效,而且也要在
服务器上起作用─我们再一次利用了客户工作站的能力,通过添加、删除和改变结点来实时
更新X M L文档。
总而言之,我们实现了设计目标,整个项目是成功的。如果你仔细想想,这个应用在一些
情况下可能是非常有用的。毕竟,我们不太可能具有指向同一物理实体的几种不同方式,但我
们可以为用户提供数据的不同显示方式。利用相似的技术我们可以允许用户重新归类数据,许
多时候我们都可能需要这种操作,从本例中的对图书细节进行归类(即以题目、I S B N或作者等
分类)到提供足球明星的各种相关信息(以姓名、编号、他们在首发阵容中出现的次数等归类),
每种操作都允许客户以他们想要的形式浏览数据,并且无须再一次连接网络服务器和重新下载
数据。
第15章实例研究1—数据双重性使用683
下载
下载
第1 6章实例研究2—X M L和分布式应用程序
X M L是一种非常适于应用程序之间数据交换的格式。特别是对于松耦合的应用程序—如:
基于We b的应用程序,这点非常重要。作为一种通信协议, H T T P具有跨平台性。对于应用程序
数据来说,X M L具有同等的功效。为了体现X M L在这方面的优越性,我们将构造一个应用程序
样例,并将它作为X M L在We b应用程序领域的实例研究。
当然,这个例子完全是人为设置的。然而,其中的设计决策确实能够反映真正为企业编制
软件时将做出的一些抉择。我们将使用Active Server Pages ,Internet Information Server和
Internet Explorer 5.0构建应用程序。我们将介绍如何在脚本语言中使用X M L和D O M。更重要的
是,我们将说明X M L能够解决哪些类型的问题。
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:
XML高级编程下(54)