亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

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

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

        關鍵詞:XML; SAX; Java; 解析原理

        中圖分類號:TP312JA 文獻標識碼:A

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

        1 SAX的解析原理

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

        圖1 SAX解析原理

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

        XMLReader parser=XMLReaderFactory.createXMLReader();

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

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

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

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

        ErrorHandler:用于錯誤處理,報告致命錯誤、錯誤與警告。

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

        圖3是SAX解析XML文件的時序圖。

        2 SAX中的主要接口分析

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

        圖2 SAX的解析流程

        圖3 SAX解析XML文件時序圖

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

        圖4 XMLReaderFactory類圖

        圖5 XMLReader類圖

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

        圖6 ContentHandler類圖

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

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

        圖7 DTDhandler類圖

        圖8 ErrorHandler類圖

        3 應用案例

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

        (1) order.xml文件

        Birdsong

        02282

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

        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)勢,它提供對XML數(shù)據(jù)內(nèi)容的有效低級訪問。SAX模型最大的優(yōu)點是內(nèi)存消耗小,因為整個文件無需一次加載到內(nèi)存中,這使SAX解析器可以解析大于系統(tǒng)內(nèi)存的文件。

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

        參考文獻

        [1]Brett D McLaughlin.XML和Java技術:低級或高級的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解析器的設計和實現(xiàn)[D].北京:中國科學院研究生院,2005.

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

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

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

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

        亚洲成人福利在线观看| 精品亚洲一区二区三区四区五区 | 国产精品黄网站免费观看| 日本韩国三级aⅴ在线观看 | 91免费播放日韩一区二天天综合福利电影 | 国产精品女老熟女一区二区久久夜 | 国产精品无码久久久久下载| 国产精品自拍视频免费观看| 亚洲天堂丰满人妻av| 米奇777四色精品人人爽| 四虎在线播放免费永久视频| 亚洲视频一区二区三区免费| 亚洲国产精品婷婷久久| 内射人妻视频国内| 毛片免费在线播放| 人妻少妇久久精品一区二区| 亚洲国产成人久久精品一区| 少妇高潮一区二区三区99| 亚洲av鲁丝一区二区三区| 国产免费一区二区av| 精品露脸熟女区一粉嫩av| 国产精品久久777777| 精品2021露脸国产偷人在视频| 日韩av不卡一二三区| 91精品国产92久久久| 成人免费看片又大又黄| 亚洲VA不卡一区| 久久综合九色综合久久久| 欧洲美女熟乱av| 国产成人一区二区三区在线观看| 久久亚洲国产精品五月天| 色婷婷精品午夜在线播放| 少妇人妻精品一区二区三区| 911国产精品| 亚洲高清av一区二区| 老鲁夜夜老鲁| 色婷婷综合久久久久中文| 97色综合| 99久久久人妻熟妇精品一区二区| 天堂√在线中文官网在线| 久久久久久久98亚洲精品|