曝光台 注意防骗
网曝天猫店富美金盛家居专营店坑蒙拐骗欺诈消费者
X P a t h,以及在S A X事件流中检测到X P a t h时要调用的相关模板处理器。
虽然本章的实例研究不涉及这项内容,但是你很容易将每个转换类模块移至它自己的
ActiveX DLL中,通过这种方式能够创建真正的可扩展系统。
2. 样式匹配
为了将X P a t h与模板处理器相关联,我们使用C P a t t e r n和C P a t t e r n C o l l e c t i o n。C P a t t e r n用于存
放字符串,除此之外,它还包含对模板处理器的引用(参见图1 7 - 1 4)。
图17-14
实际上,一个模板处理器能够负责处理一个或多个样式,反之亦然,但是在本章的实例研
究中,一个样式只与一个模板相关。简而言之, C P a t t e r n是与接口I t e m p l a t e相关的,这样就不需
要具体的类—它为系统提供了扩展性。
与C U s e r类相似,C P a t t e r n C o l l e c t i o n类是由零个或多个C P a t t e r n类构成的(参见图1 7 - 1 5)。
图17-15
(1) 创建C P a t t e r n和C P a t t e r n C o l l e c t i o n
为了创建这些类,我们首先讨论类构造器。
如果你以前从未遇到过这个工具,可以通过附件菜单调用它—通过附件管理器菜单项
736使用XML 高级编程
下载
能够安装它。类构造器的含义非常明确,你能够利用它迅速创建具有特定属性和方法的
类—不必过多担心输入错误。它还提供了许多其他有用的工具,例如:我们后面将要
用到的迅速创建集合,但是其中的大多数工具都超出了本章的讨论范围。
为C P a t t e r n添加类模块,使用类构造器添加属性和方法。通过按键C t r l - S更新属性,你的
C P a t t e r n类模块将类似于以下代码(注意,以下代码的格式已经重排,但是仅限于缩进):
程序清单1 7 - 1 9
需要注意的是,我在所有V B类模块中手工添加了“Option Explicit”行。通过添加该行,
V B能够保证所有变量都是在引用/使用之前定义的。这是一种非常值得借鉴的方式,因为
否则V B会在第一次使用时动态声明,这可能导致某些错误只能在运行时才能检测出来,
如果你像我一样是个拼写水平一般的人,这简直就是一场噩梦。
转换引擎类将包含样式集合,而且将提供生成集合的A d d P a t t e r n ( )方法(参见图1 7 - 1 6)。
添加类模块C S A X Tr a n s f o r m E n g i n e,并添加C P a t t e r n C o l l e c t i o n类型的成员变量m _ P a t t e r n s,
以及间接生成集合的方法A d d P a t t e r n:
程序清单1 7 - 2 0
第17章实例研究3—图书目录信息服务使用737 下载
转换引擎将使用样式集合判断是否要将处理源X M L文档时产生的各种S A X事件转发给模板
处理器。
图17-16
(2) 添加S A X解析器
下面,我们需要将S A X解析器集成在转换引擎类中,因此声明S A X解析器实例:
为了使用户从转换引擎得到反馈,并显示错误信息,我们还要声明保存列表视图引用的变
量:
对于L i s t Vi e w,你需要添加对Microsoft Windows Common Controls 6.0组件的引用。
日志例程将访问L i s t Vi e w,引擎代码将访问该日志例程为用户提供反馈。使用转换引擎的代
码能够传递它创建的L i s t Vi e w的引用,而后转换引擎将使用该引用。从视觉角度考虑,我为本章
的实例研究选择了L i s t Vi e w,但是利用该函数封装日志,你很容易将它改为文件或其他更适当的
738使用XML 高级编程
下载
形式。下面显示了L o g L i n e ( )例程的实现:
程序清单1 7 - 2 1
下面,我们在C S A X Tr a n s f o r m E n g i n e类中添加P r o c e s s F i l e ( )方法:
程序清单1 7 - 2 2
P r o c e s s F i l e ( )方法要求转换引擎解析指定的文件,并根据通过A d d P a t t e r n ( )方法添加在
C P a t t e r n C o l l e c t i o n中的样式调用适当的模板处理器。该函数将L i s t Vi e w保存在变量m _ o L i s t Vi e w
中,以便L o g F i l e ( )子例程访问(该子例程的作用是为用户提供反馈),然后,函数创建S A X解析
器的实例,并要求它解析文件。如果出于某种原因X M L解析失败,我们将通过调用L o g L i n e ( )例
程通知用户,该例程会在由o L i s t Vi e w参数指定的L i s t Vi e w中添加项目。
为了检查代码的效果,我们更新窗体,使之包含L i s t Vi e w。此时,我们将添加构成最终G U I
的所有控件,因此我们需要添加对以下控件的引用:
• Windows Tabbed Dialog Control 6.0。
• Microsoft Internet Controls。
删除我们以前在窗体中添加的命令按钮以及事件处理器代码。添加标签控件(使用V B提供
的缺省名称),它的高度是窗体高度的2 / 3,在标签之下,添加两个命令按钮和两个文本编辑框
(参见图1 7 - 1 7)。
对于窗体中的大多数控件,我都使用了V B提供的缺省名称,你完全可以更改这些名称,
但是如果文本中用到这些名称,应该格外谨慎。
标有文本Split File的按钮的名称应该为S p l i t F i l e,旁边的编辑框的名称应该是F i l e To P r o c e s s。
标有文本Scan Directory的按钮的名称应该为S c a n D i r e c t o r y,旁边的编辑框的名称应该是
S c a n P a t h。
调出标签控件的属性,将第一个标签命名为Web Vi e w,将第二个标签命名为Log Messages,
通过将标签计数改为2删除第三个标签。选择第一个标签,在其上放置We b B r o w s e r控件。在该控
第17章实例研究3—图书目录信息服务使用739 下载
件下,放置样式为Dropdown List的组合框(参见图1 7 - 1 8)。
图17-17
图17-18
We b浏览器控件将用于查看我们创建的转换信息,组合框显示了转换引擎创建的所有文件的
名称。
选择第二个标签,在其上放置L i s t Vi e w控件(不是l i s t b o x),将它命名为L o g Wi n d o w(参见
图1 7 - 1 9)。
这是我们完整的G U I。按钮Split File 用于要求转换引擎处理单个X M L文档。按钮S c a n
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:
XML高级编程下(69)