曝光臺 注意防騙
網(wǎng)曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
它并不提供任何執(zhí)行代碼。然而接口是具體的規(guī)范,而不僅僅是文件片段, J a v a編譯器保
證需要實現(xiàn)接口的類正確地操作。
• 類提供可執(zhí)行的方法,包括可以被其他類中代碼調(diào)用的公共方法。
• 類可以實現(xiàn)一個或多個接口。很多情況下S A X指定的一些接口理論上可以被各不相同的類
實現(xiàn),但實際上經(jīng)常是和某單個類結合實現(xiàn)的。為了實現(xiàn)一個接口,類必須提供接口中定
義的每個方法的代碼。
• 幾個類可以實現(xiàn)同一個接口。當然這正是S A X需要重點做的—有許多S A X解析器接口的
實現(xiàn)可以選擇,因為它們實現(xiàn)相同的接口,應用程序無須關心使用的是哪一個實現(xiàn)。
一些S A X接口是解析器中的類實現(xiàn)的,而有些S A X接口必須由應用程序中的類實現(xiàn)。S A X
自身提供了一些類,盡管可以不使用它們。有些類是解析器必須提供的(如錯誤處理類),但是
應用程序可以根據(jù)需要忽略它們。
1. 基本結構
一個簡單的S A X應用程序的構成如圖6 - 1所示。
圖6-1
在圖中:
• 應用程序是主程序:你編寫的用來開始整個處理過程的代碼。
• 文檔處理器是你編寫的用來處理文檔內(nèi)容的代碼。
第6章SAX 1.0: XML簡易API使用149 下載
應用程序
解析器
文檔處理器
• 解析器是符合S A X標準的X M L解析器。
應用程序的工作就是創(chuàng)建一個解析器(更準確地說是初始化一個實現(xiàn)o rg . x m l . s a x . P a r s e r接口
的類);創(chuàng)建一個文檔處理器(通過初始化一個實現(xiàn)o rg . x m l . s a x . D o c u m e n t H a n d l e r接口的類);
告知解析器使用哪個文檔處理器(通過調(diào)用解析器的setDocumentHandler( )方法);告知解析器
開始處理一個特定的輸入文檔(通過調(diào)用解析器的parse( )方法)。
解析器的作用是通報文檔處理器它在文檔中找到的所有感興趣的內(nèi)容,例如元素的起始和
結束標簽。
文檔處理器的作用是處理這些通報以獲取應用程序需要的所有內(nèi)容。
2. 一個簡單的S A X例子
下面是一個非常簡單的應用程序:程序僅僅對輸入X M L文件中< b o o k >元素的數(shù)量進行統(tǒng)計
(X M L文件清單附后)。
在本例中,通過使用同一個類實現(xiàn)主程序與文檔處理器以簡化上面圖中描述的S A X應用程
序結構。這是因為一個J a v a類可以實現(xiàn)幾個接口,所以它可以同時做不同工作。
應用程序必須首先創(chuàng)建一個解析器:
程序清單6 - 3
你只需要在這里說明要使用哪種特定的S A X解析器。我們選用了James Clark開發(fā)的x p解析
器,它可以從h t t p : / / w w w.jclark.com 獲取。當然就像你使用的其他J a v a類一樣,它必須加到J a v a
類路徑中。
選用的解析器必須實現(xiàn)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列出了一些更流行的解析器和創(chuàng)建實例時需要使用的類名(但
是注意這些名稱可能隨著產(chǎn)品后來的版本而改變)。
表6 - 1
產(chǎn)品詳細描述
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 高級編程
下載
(續(xù))
產(chǎn)品詳細描述
解析器類: 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
這樣你就已經(jīng)創(chuàng)建了一個解析器。現(xiàn)在可以指定解析器要進行的操作了。
首先需要告訴解析器當事件發(fā)生時調(diào)用哪個文檔處理器。它可以是任何實現(xiàn)
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定義的一個接口。可以讓應用程序直接實現(xiàn)接口,這樣的話就
必須為接口所需要的各種不同方法提供代碼實現(xiàn)。但是在本例中,我們希望忽略大多數(shù)事件,
那么定義許多什么都不做的方法是相當繁瑣的。好在S A X提供了對空操作D o c u m e n t H a n d l e r的實
現(xiàn)—H a n d l e r B a s e,我們的程序可以在此基礎上進行擴展,這樣它會繼承所有“空”方法。如
下所示:
程序清單6 - 4
setDocumentHandler( )調(diào)用告訴解析器“ 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的實現(xiàn),因為它繼承了o rg . x m l . s a x . H a n d l e r B a s e,而其又實現(xiàn)了
D o c u m e n t H a n d l e r。
解析器現(xiàn)在基本上可以運行了;它只需一個要解析的文檔和Java main( )方法使它成為一個
中國航空網(wǎng) www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級編程上(58)