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.

主站蜘蛛池模板: 成人午夜在线播放| 国产一级特黄aa级特黄裸毛片| 日本尹人综合香蕉在线观看| 国产在线无码一区二区三区| 亚洲精品视频免费看| 特级做a爰片毛片免费69| 国产毛片久久国产| 99热这里只有免费国产精品| 日韩无码真实干出血视频| 国产AV无码专区亚洲A∨毛片| 国产无码网站在线观看| 亚洲av中文无码乱人伦在线r| 91啪在线| 亚洲性网站| 欧美a级完整在线观看| 欧美三级日韩三级| 一本无码在线观看| 青青草国产一区二区三区| 人妻出轨无码中文一区二区| 久草国产在线观看| 亚洲欧美日韩中文字幕在线一区| 成人综合网址| 在线精品视频成人网| 成人免费网站久久久| 国产精品成人一区二区不卡| 国产亚洲成AⅤ人片在线观看| 国产成人艳妇AA视频在线| 波多野结衣无码中文字幕在线观看一区二区 | 国产成人免费手机在线观看视频| 精品国产成人a在线观看| 一级毛片a女人刺激视频免费| 粗大猛烈进出高潮视频无码| 国产成人无码AV在线播放动漫| 国产玖玖玖精品视频| 国产成人午夜福利免费无码r| 国产成人一二三| 黄色网站在线观看无码| 国产精品美人久久久久久AV| 久久久久久久久18禁秘| 亚洲中文字幕久久无码精品A| 亚洲精品视频免费观看| 手机在线国产精品| 中文字幕无码制服中字| 一本久道热中字伊人| 在线观看免费黄色网址| 成年免费在线观看| 免费国产无遮挡又黄又爽| 99久久人妻精品免费二区| 欧美高清国产| 久久人妻系列无码一区| 国产视频a| 亚洲中文字幕av无码区| 国产精品jizz在线观看软件| 国产在线麻豆波多野结衣| 国产自产视频一区二区三区| 在线中文字幕网| 无码AV高清毛片中国一级毛片| 91免费国产高清观看| 伊人色在线视频| 亚洲天堂.com| 98超碰在线观看| 国产成人精品午夜视频'| 欧美色丁香| 亚洲无码精品在线播放| 久久久久久久97| 丁香六月综合网| 免费网站成人亚洲| 国产精品亚洲日韩AⅤ在线观看| 天天做天天爱天天爽综合区| 国产黄视频网站| 精品一区二区三区无码视频无码| 亚洲精品777| 亚洲天堂视频网站| 日韩精品一区二区三区视频免费看| 另类欧美日韩| 精品一区二区三区视频免费观看| 国产视频久久久久| 欧美成人a∨视频免费观看| 欧美日韩国产综合视频在线观看| P尤物久久99国产综合精品| 久久久久久久久久国产精品| 久久久久国产精品熟女影院|