999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于SAX的XML數(shù)據(jù)解析技術(shù)分析研究

2010-04-12 00:00:00劉雨瀟
現(xiàn)代電子技術(shù) 2010年12期

摘 要:著重介紹用SAX解析XML文件的解析原理,詳細(xì)分析SAX這一XML文件解析模型的相關(guān)類和接口,之后給出了一個(gè)商品定單文件,并用SAX解析XML商品定單文件并將其中的內(nèi)容讀取出來,同時(shí)給出SAX解析XML文件的關(guān)鍵代碼。最后就SAX的缺點(diǎn)進(jìn)行了分析,得出結(jié)論,從而為SAX在其他領(lǐng)域的相關(guān)應(yīng)用提供理論依據(jù)。

關(guān)鍵詞:XML; SAX; Java; 解析原理

中圖分類號(hào):TP312JA 文獻(xiàn)標(biāo)識(shí)碼:A

文章編號(hào):1004-373X(2010)12-0055-02

Analysis and Research of XML Data Analytical Technique Based on SAX

LIU Yu-xiao

(Xiangfan University, Xiangfan 441001, China)

Abstract:The analytical principle of parsing XML documents by SAX is introduced. The related classes and interface of the XML document analytical model of SAX is analyzed in detail, after that, an order form commodity information file is given, through parsing the XML commodity information file by SAX and reading its content, an essential code of parsing XML by SAX can be got at the same time. Finally, the defects of SAX is analyzed, and the theoretical basis of SAX applied in other fields is provided.

Keywords: XML; SAX; Java; analytical principle

SAX是一個(gè)通用的XML解析器前端。它是被開源項(xiàng)目(如Apache)和許多大公司(如Sun,IBM,Oracle和Microsoft)廣泛使用的XML解析器規(guī)范[1]。SAX由David Megginson領(lǐng)導(dǎo)的XML-Dev郵件列表成員開發(fā)(http://www.megginson.com/downloads/SAX/),原先用Java語言實(shí)現(xiàn),當(dāng)前版本為SAX 2.0.1,擁有其他語言的實(shí)現(xiàn)[2]。SAX是基于事件的 API,它通過回調(diào)函數(shù)直接向應(yīng)用程序報(bào)告解析事件(如元素的開始和結(jié)束),由應(yīng)用程序處理器處理不同的事件。

1 SAX的解析原理

SAX是基于事件的 API,它通過回調(diào)函數(shù)直接向應(yīng)用程序報(bào)告解析事件 (如元素的開始和結(jié)束),由應(yīng)用程序處理器處理不同的事件[3]。SAX解析器讀取輸入文件并在處理文件時(shí)將每個(gè)事件推給事件處理器。圖1是SAX的解析原理。

圖1 SAX解析原理

在SAX規(guī)范中,解析是從XMLReader這個(gè)接口開始的,該接口由靜態(tài)XMLReaderFactory.createXMLReader()方法創(chuàng)建這個(gè)類的的解析器特定實(shí)例[4]。具體代碼如下所示:

XMLReader parser=XMLReaderFactory.createXMLReader();

創(chuàng)建了該解析器的實(shí)例parser后,調(diào)用parser中的方法設(shè)置各個(gè)事件處理器,同時(shí)創(chuàng)建該事件處理器的實(shí)例,接著回調(diào)各個(gè)事件處理器實(shí)例中的方法處理XML文件中的數(shù)據(jù)。

在SAX規(guī)范中,一共定義了3種常用的事件處理器,分別是:

ContentHandler:普遍使用的事件處理器,用它來處理XML文件中的內(nèi)容,使用它基本上可以滿足90%的需要。

DTDHandler:用于訪問DTD的內(nèi)容[5]。

ErrorHandler:用于錯(cuò)誤處理,報(bào)告致命錯(cuò)誤、錯(cuò)誤與警告。

圖2是SAX處理XML文件的解析流程圖。

圖3是SAX解析XML文件的時(shí)序圖。

2 SAX中的主要接口分析

(1) XMLReaderFactory。XMLReaderFactory是一個(gè)靜態(tài)的工廠類,它用來實(shí)例化XMLReader表示分析器的接口。圖4是XMLReaderFactory的類圖。

圖2 SAX的解析流程

圖3 SAX解析XML文件時(shí)序圖

(2) XMLReader。XMLReader類表示一個(gè)分析器,其中的parse()方法用來通知解析器開始解析XML文件。setContentHandler()方法用來設(shè)置一個(gè)內(nèi)容處理器,setDTDHandler()方法用來設(shè)置一個(gè)DTD處理器,setErrorHandler()方法用來設(shè)置一個(gè)錯(cuò)誤處理器。圖5是XMLReader的類圖。

圖4 XMLReaderFactory類圖

圖5 XMLReader類圖

(3) ContentHandler。ContentHandler作為內(nèi)容處理器,將一個(gè)XML文件定義成11種事件,用來處理XML文件。圖6是ContentHandler類圖。

圖6 ContentHandler類圖

(4) DTDHandler。DTD處理器中notationDecl()方法用來聲明標(biāo)記。unparsedEntityDecl()方法用來聲明非分析實(shí)體。圖7是DTDhandler的類圖。

(5) ErrorHandler。錯(cuò)誤處理器ErrorHandler中的Warning()方法報(bào)告警告,error()方法報(bào)告非致命錯(cuò)誤,fatalError()方法報(bào)告致命錯(cuò)誤。圖8是ErrorHandler的類圖。

圖7 DTDhandler類圖

圖8 ErrorHandler類圖

3 應(yīng)用案例

該應(yīng)用案例的內(nèi)容是用SAX將一個(gè)從互聯(lián)網(wǎng)上傳來的XML定單進(jìn)行解析 (由于篇幅所限,這里只給出部分關(guān)鍵代碼)。

(1) order.xml文件

Birdsong

02282

(2) 用SAX解析order.xml文件的關(guān)鍵代碼

public class SAXReader extends DefaultHandler {

java.util.Stack tags=new java.util.Stack();

public SAXReader() {

super(); }

public static void main(String args[]) {

try{

SAXParserFactory sf = SAXParserFactory.

newInstance();

SAXParser sp = sf.newSAXParser();

SAXReader reader = new SAXReader();

sp.parse(new InputSource(\"XXX.xml\"),reader);}

catch (Exception e) {

e.printStackTrace();} }

public void characters(char ch[],int start,int length) throws SAXException {

String tag = (String) tags.peek();

System.out.print(new String(ch,start,length)); }

public void startElement(String uri,String localName,String qName,Attributes attrs) {

tags.push(qName);} }

(3) 解析結(jié)果

Birdsong

02282

4 結(jié) 語

SAX解析器能提供更好的性能優(yōu)勢(shì),它提供對(duì)XML數(shù)據(jù)內(nèi)容的有效低級(jí)訪問。SAX模型最大的優(yōu)點(diǎn)是內(nèi)存消耗小,因?yàn)檎麄€(gè)文件無需一次加載到內(nèi)存中,這使SAX解析器可以解析大于系統(tǒng)內(nèi)存的文件。

SAX的缺點(diǎn)是必須實(shí)現(xiàn)多個(gè)事件處理程序,以便能夠處理所有的事件,同時(shí)還必須在應(yīng)用程序代碼中維護(hù)事件狀態(tài)。此外,SAX是一個(gè)只讀API,不支持隨機(jī)訪問,編寫SAX應(yīng)用程序時(shí),必須自己跟蹤解析器處在文檔層次的哪個(gè)位置。如此一來,文檔結(jié)構(gòu)越復(fù)雜,編寫應(yīng)用程序所面臨的困難就會(huì)成倍的增加。

參考文獻(xiàn)

[1]Brett D McLaughlin.XML和Java技術(shù):低級(jí)或高級(jí)的XML API[EB/OL].[ 2007-06-28] .http://www.ibm.com/developerworks/cn.

[2][ 美] 哈羅德.Java語言與XML處理教程:SAX,DOM,JDOM.JAXP與TrAX指南[M].北京:電子工業(yè)出版社,2003.

[3]汪劍超.超高性能Jave SAX解析器的設(shè)計(jì)和實(shí)現(xiàn)[D].北京:中國科學(xué)院研究生院,2005.

[4]孫毅.XML集成化編輯解析環(huán)境的開發(fā)與研究[D].武漢:武漢理工大學(xué),2003.

[5]Jane Fung.解碼XML和DTD[EB/OL].[ 2001-04-27] .http:// www.ibm.com/developerworks/cn/xml/x-dtdint/.2001.

[6]蔡七華,王明強(qiáng).XML語法特性在SAX中的應(yīng)用研究[ J] .現(xiàn)代電子技術(shù),2008,31(8):64-67.

[7]劉雨瀟,冒東奎.基于StAX中事件迭代器API的XML數(shù)據(jù)解析技術(shù)研究[ J] .現(xiàn)代電子技術(shù),2008,31(10):103-105.

主站蜘蛛池模板: 国产极品美女在线| 伊伊人成亚洲综合人网7777| 制服丝袜一区二区三区在线| 亚洲综合极品香蕉久久网| 国产微拍一区二区三区四区| 亚洲性日韩精品一区二区| 亚洲午夜天堂| 一边摸一边做爽的视频17国产| 激情综合图区| 国产喷水视频| 在线日本国产成人免费的| 亚洲一区二区三区麻豆| 国产成人综合亚洲欧美在| 制服丝袜亚洲| 久久亚洲中文字幕精品一区| 性网站在线观看| 亚洲第一成年人网站| 国产成人免费高清AⅤ| 粗大猛烈进出高潮视频无码| 欧美日本一区二区三区免费| AV老司机AV天堂| 亚洲区欧美区| 成人国产精品网站在线看| 亚洲欧州色色免费AV| 国产 在线视频无码| 无码啪啪精品天堂浪潮av| 亚洲无线一二三四区男男| 国产精品成人观看视频国产 | 日日噜噜夜夜狠狠视频| 92精品国产自产在线观看| 国产不卡一级毛片视频| 久久 午夜福利 张柏芝| 亚洲精品视频免费| 99热这里只有免费国产精品 | 欧美a级完整在线观看| 不卡午夜视频| 亚洲欧洲日韩国产综合在线二区| 亚洲欧美在线综合一区二区三区| 亚洲区一区| 青青草原国产av福利网站| 亚洲精品成人福利在线电影| 97久久超碰极品视觉盛宴| 麻豆AV网站免费进入| 精品免费在线视频| 亚洲成人网在线观看| 99r在线精品视频在线播放 | jizz在线免费播放| 综合社区亚洲熟妇p| 91极品美女高潮叫床在线观看| 在线播放精品一区二区啪视频| 婷婷亚洲视频| 色综合中文字幕| 国产噜噜在线视频观看| 欧美亚洲一区二区三区在线| 欧美日韩第三页| 国产 在线视频无码| 欧美午夜网站| 国产日韩av在线播放| www精品久久| 9丨情侣偷在线精品国产| 91福利在线看| 伊人久久福利中文字幕| 亚欧成人无码AV在线播放| 亚洲91在线精品| 97se亚洲综合在线天天| 毛片在线播放网址| 草草影院国产第一页| 人妻无码中文字幕一区二区三区| 九色视频在线免费观看| 91精品网站| 91国内在线观看| 9啪在线视频| 成人无码一区二区三区视频在线观看| 在线国产毛片手机小视频| 动漫精品中文字幕无码| 国产一二三区在线| 激情视频综合网| 性视频久久| 久久影院一区二区h| 国产精品微拍| 国产精品成人免费综合| 国产麻豆aⅴ精品无码|