• 热门标签

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

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

它并不提供任何执行代码。然而接口是具体的规范,而不仅仅是文件片段, J a v a编译器保
证需要实现接口的类正确地操作。
• 类提供可执行的方法,包括可以被其他类中代码调用的公共方法。
• 类可以实现一个或多个接口。很多情况下S A X指定的一些接口理论上可以被各不相同的类
实现,但实际上经常是和某单个类结合实现的。为了实现一个接口,类必须提供接口中定
义的每个方法的代码。
• 几个类可以实现同一个接口。当然这正是S A X需要重点做的—有许多S A X解析器接口的
实现可以选择,因为它们实现相同的接口,应用程序无须关心使用的是哪一个实现。
一些S A X接口是解析器中的类实现的,而有些S A X接口必须由应用程序中的类实现。S A X
自身提供了一些类,尽管可以不使用它们。有些类是解析器必须提供的(如错误处理类),但是
应用程序可以根据需要忽略它们。
1. 基本结构
一个简单的S A X应用程序的构成如图6 - 1所示。
图6-1
在图中:
• 应用程序是主程序:你编写的用来开始整个处理过程的代码。
• 文档处理器是你编写的用来处理文档内容的代码。
第6章SAX 1.0: XML简易API使用149 下载
应用程序
解析器
文档处理器
• 解析器是符合S A X标准的X M L解析器。
应用程序的工作就是创建一个解析器(更准确地说是初始化一个实现o rg . x m l . s a x . P a r s e r接口
的类);创建一个文档处理器(通过初始化一个实现o rg . x m l . s a x . D o c u m e n t H a n d l e r接口的类);
告知解析器使用哪个文档处理器(通过调用解析器的setDocumentHandler( )方法);告知解析器
开始处理一个特定的输入文档(通过调用解析器的parse( )方法)。
解析器的作用是通报文档处理器它在文档中找到的所有感兴趣的内容,例如元素的起始和
结束标签。
文档处理器的作用是处理这些通报以获取应用程序需要的所有内容。
2. 一个简单的S A X例子
下面是一个非常简单的应用程序:程序仅仅对输入X M L文件中< b o o k >元素的数量进行统计
(X M L文件清单附后)。
在本例中,通过使用同一个类实现主程序与文档处理器以简化上面图中描述的S A X应用程
序结构。这是因为一个J a v a类可以实现几个接口,所以它可以同时做不同工作。
应用程序必须首先创建一个解析器:
程序清单6 - 3
你只需要在这里说明要使用哪种特定的S A X解析器。我们选用了James Clark开发的x p解析
器,它可以从h t t p : / / w w w.jclark.com 获取。当然就像你使用的其他J a v a类一样,它必须加到J a v a
类路径中。
选用的解析器必须实现S A X解析器接口o rg . x m l . s a x . P a r s e r(否则J a v a处理起来会很困难),
所以可以把一个P a r s e r类型的变量赋值给它。由于开始的i m p o r t语句, P a r s e r实际上代表
o rg . x m l . s a x . P a r s e r。
所以你需要知道选用解析器的相关类的名称。奇怪的是很多可用的S A X解析器并不特别明
确地公布它们的类名。所以表6 - 1列出了一些更流行的解析器和创建实例时需要使用的类名(但
是注意这些名称可能随着产品后来的版本而改变)。
表6 - 1
产品详细描述
A E l f r e d 地址: h t t p : / / w w w. m i c r o s t a r. c o m / a e l f r e d . h t m l
解析器类: com.microstar. x m l . S A X D r i v e r
Datachannel DXP 地址: h t t p : / / w w w. d a t a c h a n n e l . c o m / p r o d u c t s / x j p a r s e r. h t m l
解析器类: com.datachannel.xml.sax.SAXDriver
IBM xml4j 地址: h t t p : / / a l p h a w o r k s . i b m . c o m / t e c h / x m l 4 j
解析器类(非确认型) : c o m . i b m . x m l . p a r s e r s . S A X P a r s e r
解析器类(确认型) : c o m . i b m . x m l . p a r s e r s . Va l i d a t i n g S A X P a r s e r
O r a c l e 地址: h t t p : / / w w w. o r a c l e . c o m(需要Te c h N e t注册)
150使用XML 高级编程
下载
(续)
产品详细描述
解析器类: oracle.xml.parser. v 2 . S A X P a r s e r
Sun Project X 地址: h t t p : / / j a v a . s u n . c o m / p r o d u c t s / x m l /
解析器类(非确认型) : c o m . s u n . x m l . p a r s e r. P a r s e r
解析器类(确认型) : com.sun.xml.parser. Va l i d a t i n g P a r s e r
x p 地址: h t t p : / / w w w. j c l a r k . c o m / x p
解析器类: com.jclark.xml.sax.Driver
这样你就已经创建了一个解析器。现在可以指定解析器要进行的操作了。
首先需要告诉解析器当事件发生时调用哪个文档处理器。它可以是任何实现
o rg . x m l . s a x . D o c u m e n t H a n d l e r S A X接口的类。最简单也是最常用的方式是让你的应用程序本身作
为文档处理器。
D o c u m e n t H a n d l e r本身是S A X定义的一个接口。可以让应用程序直接实现接口,这样的话就
必须为接口所需要的各种不同方法提供代码实现。但是在本例中,我们希望忽略大多数事件,
那么定义许多什么都不做的方法是相当繁琐的。好在S A X提供了对空操作D o c u m e n t H a n d l e r的实
现—H a n d l e r B a s e,我们的程序可以在此基础上进行扩展,这样它会继承所有“空”方法。如
下所示:
程序清单6 - 4
setDocumentHandler( )调用告诉解析器“ t h i s”类(应用程序)要接收事件的告示。这个类
是o rg . x m l . s a x . D o c u m e n t H a n d l e r的实现,因为它继承了o rg . x m l . s a x . H a n d l e r B a s e,而其又实现了
D o c u m e n t H a n d l e r。
解析器现在基本上可以运行了;它只需一个要解析的文档和Java main( )方法使它成为一个
 
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:XML高级编程上(58)