• 热门标签

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

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

针对特定的用户调用X M L到X M L的转换:
程序清单1 7 - 5 0
方法以C U s e r对象和要处理的X M L输入文件作为参数。C U s e r对象提供转换的详细信息(例
如:格式和输出文件名)。以上代码创建转换引擎,创建模板处理器,然后将模板处理器传递给
前面讨论的输出接口( I O u t p u t),所有输出都将写入该接口:
正如以上代码所示,I O u t p u t接口是由窗体实现的,因此我们必须在主窗体的顶端添加以下行:
而且I O u t p u t要实现写入字符串的方法:
变量m _ o O u t s t r e a m定义为Te x t S t r e a m对象,它是Microsoft Scripting Runtime类型库的一部分,
因此你还需要在项目中添加对该类型库的引用。添加之后,在窗体代码模块的顶端声明该对象:
在代码调用转换引擎处理函数之前要设置该对象:
第17章实例研究3—图书目录信息服务使用755 下载
输出文件名是由用户对象指定的,因此X M L文档中的每个用户要定义一个用户对象。
P e r f o r m X M LTo X M LTr a n s f o r m ( )中的最后一部分代码是构造X M L到X M L转换类的分类过滤
器,这是通过从用户对象中拷贝分类实现的:
由于我们能够以每个用户为基础通过调用P e r f o r m X M LTo X M LTr a n s f o r m ( )方法执行X M L转
换,对于每个希望以X M L格式接收数据的订阅者,我们可以修改S p l i t F i l e点击处理器执行转换过
程:
程序清单1 7 - 5 1
如果运行代码,你会发现它只为将分发格式设置为X M L的订阅者执行X M L转换过程,而且
We b视图标签中的组合框将列出已经创建的所有文件(参见图1 7 - 2 5)。
图17-25
756使用XML 高级编程
下载
该组合框是通过P e r f o r m X M LTo X M LTr a n s f o r m ( )函数添加的:
组合框中显示的输出文件名是由U s e r s . X M L中的O u t p u t F i l e元素定义的:
程序清单1 7 - 5 2
然而,如果你从组合框中选择文件名,什么也不会发生,因为我们尚未实现改变处理器。
为此,通过在表单中添加以下代码实现c o m b o b o x的c l i c k处理器,它用于告知w e b b r o w s e r控件定
位至指定的文件:
如果我们通过点击Split File按钮并选择K W. X M L项执行转换,我们将看到We b浏览器控件中
显示X M L文档的内容(参见图1 7 - 2 6)。
图17-26
第17章实例研究3—图书目录信息服务使用757 下载
5. XML到H T M L的转换
X M L到H T M L的转换的实现方式与X M L到X M L的转换基本相同,它们唯一的差别在于这次
的输出格式是H T M L。因此,我只是简单地列出代码,而不做详细的解释。
删除C H T M L C a t a l o g Tr a n s f o r m类中现有的代码,并用C X M L C a t a l o g Tr a n s f o r m中的代码进行
替换。事件处理器s t a r t D o c u m e n t、e n d D o c u m e n t和e n d E l e m e n t中需要修改的行已经突出显示:
程序清单1 7 - 5 3
为了将X M L转换为H T M L,我们将在窗体中添加用于创建H T M L输出文件的辅助函数。为
此,拷贝P e r f o r m X M LTo X M LTr a n s f o r m ( )函数,将它的名称改为P e r f o r m X M LTo H T M LTr a n s f o r m,
并将所有对C X M L C a t a l o g Tr a n s f o r m的引用改为对C H T M L C a t a l o g Tr a n s f o r m的引用:
程序清单1 7 - 5 4
758使用XML 高级编程
下载
现在,我们已经生成了转换类和辅助函数,可以修改S p l i t F i l e _ C l i c k ( )方法,使之能够根据
订阅者的配置信息选择适当的转换引擎:
程序清单1 7 - 5 5
如果我们再次运行程序,你会发现现在能够查看订阅者的H T M L输出(参见图1 7 - 2 7)。
图17-27
第17章实例研究3—图书目录信息服务使用759 下载
既然转换引擎已经就绪, B C I S中尚未实现的部分只剩下直接邮件分发组件以及自动扫描目
录,并检测和处理多个X M L文档。
6. 扫描目录功能
为了实现扫描目录功能,我们将使用Microsoft Scripting Runtime提供的组件。
双击Scan Directory按钮,按照以下代码修改点击处理器:
程序清单1 7 - 5 6
代码利用F i l e S y s t e m O b j e c t的G e t F o l d e r ( )方法根据当前扫描目录获取F o l d e r对象。然后,使
用F o r. . . E a c h语句枚举文件夹中的所有文件。如果文件名中包含文本“ . x m l”(扩展名),我们将
在L i s t Vi e w中列出文件名(参见图1 7 - 2 8)。
图17-28
760使用XML 高级编程
下载
成功检测到文件之后,我们需要依次处理每个文件。为此,我们在窗体中添加函数
P r o c e s s F i l e ( )。该函数改写了Split File点击处理器中的代码,它用于接受文件名,我们没有使用
编辑框中的值:
程序清单1 7 - 5 7
我们可以从扫描代码中调用该函数,为每位订阅者处理每个文件:
程序清单1 7 - 5 8
扫描目录时,你应该保证目录中只包含有效的X M L分类文件,否则你的订阅者将接收空
的X M L或H T M L文件。在实际应用系统中,你必须改进转换类模块接口,使之能够产生
某种反馈,说明是否创建了输出,以及是否值得发送。
如果运行项目,并指定包含1 0个X M L分类文件的文件夹,而且我们的U s e r s . x m l文档定义了
三个订阅者,程序总共将执行3 0次转换。我们当然可以改写代码,使之仅执行三次转换,如果
你打算采用这种方式,就把它作为练习吧。然而,还有一个问题有待解决。对于3个用户1 0个文
件的情况,每次转换都使用相同的输出文件名。在执行下一次转换之前,我们需要对前一次转
换的结果进行一定的处理,以免丢失。对于B C I S,我们采取的操作是将转换结果通过电子邮件
发送给用户。
7. 直接邮件分发组件
为了将图书信息分发给订阅者,我们使用Microsoft Collaboration Data Object(C D O)库。
 
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:XML高级编程下(73)