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

基于SAX的XML數據解析技術分析研究

2010-04-12 00:00:00劉雨瀟
現代電子技術 2010年12期

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

關鍵詞: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解析器規范[1]。SAX由David Megginson領導的XML-Dev郵件列表成員開發(http://www.megginson.com/downloads/SAX/),原先用Java語言實現,當前版本為SAX 2.0.1,擁有其他語言的實現[2]。SAX是基于事件的 API,它通過回調函數直接向應用程序報告解析事件(如元素的開始和結束),由應用程序處理器處理不同的事件。

1 SAX的解析原理

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

圖1 SAX解析原理

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

XMLReader parser=XMLReaderFactory.createXMLReader();

創建了該解析器的實例parser后,調用parser中的方法設置各個事件處理器,同時創建該事件處理器的實例,接著回調各個事件處理器實例中的方法處理XML文件中的數據。

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

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

DTDHandler:用于訪問DTD的內容[5]。

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

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

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

2 SAX中的主要接口分析

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

圖2 SAX的解析流程

圖3 SAX解析XML文件時序圖

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

圖4 XMLReaderFactory類圖

圖5 XMLReader類圖

(3) ContentHandler。ContentHandler作為內容處理器,將一個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 應用案例

該應用案例的內容是用SAX將一個從互聯網上傳來的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) 解析結果

Birdsong

02282

4 結 語

SAX解析器能提供更好的性能優勢,它提供對XML數據內容的有效低級訪問。SAX模型最大的優點是內存消耗小,因為整個文件無需一次加載到內存中,這使SAX解析器可以解析大于系統內存的文件。

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

參考文獻

[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].北京:電子工業出版社,2003.

[3]汪劍超.超高性能Jave SAX解析器的設計和實現[D].北京:中國科學院研究生院,2005.

[4]孫毅.XML集成化編輯解析環境的開發與研究[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] .現代電子技術,2008,31(8):64-67.

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

主站蜘蛛池模板: 免费看美女自慰的网站| 亚洲国产精品无码AV| 免费在线a视频| 露脸一二三区国语对白| 欧美精品高清| 激情午夜婷婷| 亚洲欧美色中文字幕| 亚洲欧美另类久久久精品播放的| 国产一二三区在线| 国产剧情无码视频在线观看| 99re热精品视频中文字幕不卡| 91丝袜美腿高跟国产极品老师| 亚洲AⅤ无码日韩AV无码网站| 无码不卡的中文字幕视频| 久久香蕉国产线| 这里只有精品免费视频| 中文字幕亚洲第一| 97影院午夜在线观看视频| 四虎成人精品在永久免费| 国产精品粉嫩| jizz在线免费播放| 免费一级毛片在线观看| 色老头综合网| 伊人激情综合网| 日韩国产一区二区三区无码| 在线亚洲小视频| 日本道综合一本久久久88| 99久视频| 在线播放国产一区| 精品午夜国产福利观看| 国产高潮流白浆视频| 无码av免费不卡在线观看| 国产精品午夜福利麻豆| 亚洲精品人成网线在线 | 亚洲精品无码高潮喷水A| 色妞永久免费视频| 日韩乱码免费一区二区三区| 国产午夜福利亚洲第一| 91精品综合| 蜜芽国产尤物av尤物在线看| 日本91视频| 亚洲精品视频免费| 高清欧美性猛交XXXX黑人猛交| 久久女人网| 婷婷色狠狠干| 日韩高清欧美| 久久男人视频| 国产激情在线视频| 亚洲国产系列| 国产91视频观看| 播五月综合| 国产精品19p| 自拍偷拍欧美| 国产成人av一区二区三区| 伊人久久婷婷五月综合97色| 国产97视频在线观看| 国产一级无码不卡视频| 欧美成a人片在线观看| 天天摸天天操免费播放小视频| 国产凹凸一区在线观看视频| 综合成人国产| 四虎永久免费在线| www.亚洲一区二区三区| 久久99国产乱子伦精品免| 91精品最新国内在线播放| 无码电影在线观看| 九九热免费在线视频| 欧美黄色a| 丁香婷婷久久| 人妻精品全国免费视频| 一本大道视频精品人妻| 色婷婷国产精品视频| 再看日本中文字幕在线观看| 国产人成乱码视频免费观看| 91福利一区二区三区| 亚洲欧美日韩中文字幕一区二区三区| 欧美综合在线观看| 久久久久国产精品熟女影院| 国产午夜福利亚洲第一| 国产成人在线无码免费视频| 青草娱乐极品免费视频| 久久精品最新免费国产成人|