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

基于StAX中事件迭代器API的XML數據解析技術研究

2008-04-12 00:00:00劉雨瀟冒東奎
現代電子技術 2008年10期

摘 要:當今許多企業多數使用DOM(文檔對象模型)和SAX(XML的簡單API)處理XML數據。DOM的主要缺點是在XML文檔被導航之前必須在內存里建立其完整的樹形結構。為此,處理XML大文檔需要消耗大量內存。而SAX的主要缺點在于應用程序被動地接收解析器生成的事件,因此不能通過導航隨意瀏覽和修改XML文檔的指定部分。Java EE 5新推出的StAX(Streaming API for XML,XML流式API)很好地解決了上述問題。StAX既有SAX的效率,又有DOM強大的功能。介紹StAX這種最新XML數據解析技術的開發背景,分析其解析機理和技術內涵,并在此基礎之上給出一個使用基于事件迭代器的API集合解析XML文件的應用示例。實際操作表明StAX為流式處理XML提供了一個標準、雙向模式的解析器接口,比StAX更簡單,比DOM管理內存更有效。

關鍵詞:StAX;XML;XML解析;DOM

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

文章編號:1004-373X(2008)10-103-03

Study of XML Parsing Technique Based on StAX Iterator API

LIU Yuxiao,MAO Dongkui

(Computer Science and Engineering School,North University for Minorities,Yinchuan,750021,China)

Abstract:Nowadays,DOM and SAX are used for XML data processing in most enterprises.The main disadvantage is that an entire tree structure of a XML document must be created in the memory before it can be navigated.Consumption of a huge memory is needed for processing a big XML document.The Shortcoming of SAX is that applications passively receive the generated events by a parser.As a result,browsing and dealing with specified parts of a XML document are impossible.StAX(Streaming API for XML) introduced by Java EE 5 gives a good answer.StAX has the same efficiency as SAX,as well as the same powerful function as DOM.The development background of StAX,a latest parsing technique for XML data.is covered.The parsing mechanics and technical meaning are analyzed.On this basis, an application example for parsing XML document is given,which uses the StAX API based on the iterator.The practice proves that StAX provided a typical and dual interface for XML,it is more similiar and efficiency than SAX and DOM.

Keywords:StAX; XML;XML parsing;DOM

1 引 言

Java EE 5新推出的StAX(Streaming API for XML,XML流式API)為謀求以較低的內存消耗和有限的擴展要求做高性能的流式處理和修改XML文件的開發者提供一種替代SAX和DOM的API。StAX是一種基于Java的、事件驅動的、采用拉式解析方法的流式API。StAX 允許創建雙向的XML解析器。它速度快、容易編程、占用內存少[1]。

StAX是由BEA 公司領頭開發的,同時得到Sun Microsystems公司的支持。最初以JSR 173(即173號Java規范請求)公布,并于2004年3月通過了Java 社區過程(Java Community Process)的最終投票批準 (http://jcp.org/en/jsr/detail?id=173)。目前,StAX已經是Java EE5的組成部分(http://java.sun.com/javaee/5/docs/tutorial/ doc/StAX2.html)。

StAX作為用 Java 語言處理 XML 的最新標準,無論從性能還是可用性上都優于DOM 和 SAX。然而,對這樣一種很有應用價值的新型XML數據解析技術目前國內研究和應用較少。為此,本文介紹StAX的開發背景、解析機理,并在此基礎之上給出一個應用示例。

2 StAX解析機理

XML流式解析器StAX把XML文件看作一系列的事件流,由應用程序控制解析過程,即應用程序從StAX解析器中分離出XML事件進行解析處理。StAX的解析機理見圖1。

StAX包括2種處理 XML 的 API,分別提供不同程度的抽象。一種是基于指針的 API ,他允許應用程序把 XML 作為一個標記(或事件)流來處理;應用程序可以檢查解析器的狀態,獲得解析的上一個標記信息,然后再處理下一個標記,依此類推。這是一種低層 API,盡管效率高,但是沒有提供底層 XML 結構的抽象。其主要API為XMLStreamReader。

圖1 StAX的解析機理

另一種是較為高級的基于迭代器的 API ,他允許應用程序把 XML 作為一系列事件對象來處理,每個對象和應用程序交換 XML 結構的一部分[2]。應用程序只需要確定解析事件的類型,將其轉換成對應的具體類型,然后利用其方法獲得屬于該事件的信息。其主要API為XMLEventReader。

不管使用2種StAX API 中的哪一種,都是應用程序調用解析器,而不是相反。通過保留解析過程的控制權,可以簡化調用代碼,準確處理預期的內容。

基于指針的API集合和基于事件迭代器的API集合技術內涵都很豐富。受篇幅限制,本文著重介紹后面的示例所要用到的基于事件迭代器API集合的解析原理。然后通過一個典型示例演示具體用法。

3 基于事件迭代器的API集合 

顧名思意,事件迭代器API把解析一個XML文件分為12種事件,將這12種事件封裝成對象,根據封裝好的事件對象中定義的方法處理XML文件。其事件-判斷-類型轉換見表1。

表1 事件-判斷-類型轉換

其中,EntityDeclaration,NotationDeclaration事件不被單獨報告,而是作為DTD事件的一部分。

在事件迭代器API中,用nextEvent()方法返回下一個事件,用hasNext()方法判斷是否有后繼事件,用getElementText()返回元素內容,用close()方法關閉事件迭代器。事件迭代器解析流程見圖2。事件迭代器API的解析流程:

(1) 用nextEvent()方法返回事件類型;

(2) 用isXXX方法判斷是哪種事件類型;

(3) 根據事件的類型將事件實例化為事件對象;

(4) 調用事件對象所定義的方法解析XML文件;

(5) 用hasNext()判斷是否有后繼事件,如果有則重復第(1)~(4)步;

(6) XML文件解析后用close()方法關閉事件迭代器。

圖2 事件迭代器API解析流程

4 用StAX解析一個XML文件

本示例使用基于事件迭代器的API來解析一個XML文件。首先用newInstance()方法實例化一個工廠并創建一個XMLEventReader實例,并給定一個XML文件的輸入流。然后不斷檢查事件迭代器的狀態,根據當前事件的類型報告一些信息。XML文件解析從START_DOCUMENT開始,一直到END_DOCUMENT結束,最后關閉讀取器。該示例的時序圖見圖3。

示例所用到的order.xml文件:

Birdsong

244

12

21.95

135 Airline Highway

Narragansett

RI

02282

263.40

18.44

[ZK(]8.95[ZK)]

290.79

圖3 示例的時序圖

示例程序的關鍵代碼:

XMLInputFactory f = XMLInputFactory.newInstance()

f.setProperty(“javax.xml.stream.supportDTD”,true)[JY]/*支持DTD */

InputStream input=new FileInputStream(new File(“XML文件所在位置”));[JY]/*輸入XML文件*/

XMLEventReader r = f.createXMLEventReader()

try{

while(r.hasNext()){[JY]/*是否有后繼事件 */

XMLEvent event = r.nextEvent();

If(event.isStartDocument()){ [JY]/*判斷事件類型 */

StartDocument SD = (StartDocument)event;[JY] /*事件類型轉換 */

System.out.println(SD.getVersion());

}

If(event.isStratElement()){ [JY]/*判斷事件類型 */

StartElement SE = event.asStartElement();[JY]/*事件類型轉換 */

System.out.println(SE.getName());

}

………………………..

If(event.isEndDocument()){ [JY]/*判斷事件類型 */

EndDocument ED = (EndDocument)event;[JY]/*事件類型轉換 */

}

}

}

Finally{

r.close();[JY]/*關閉事件迭代器 */

}

其輸出結果如下所示:

1.0

{http://ns.cafeconleche.org/Orders/}Order

{http://ns.cafeconleche.org/Orders/}product

{http://ns.cafeconleche.org/Orders/}Name

Birdsong

{http://ns.cafeconleche.org/Orders/}Name

……………………………………

{http://ns.cafeconleche.org/Orders/}Total

290.79

{http://ns.cafeconleche.org/Orders/}Total

{http://ns.cafeconleche.org/Orders/}Order

5 結 語

StAX 為流式地處理XML提供了一個標準、雙向、拉式的解析器接口,他比SAX更簡單,比DOM管理內存更有效。StAX 使開發者能夠按事件解析和修改XML數據流,同時擴展了信息模型,允許增加應用程序特有的其他東西。

本文主要介紹StAX這種最新XML數據解析技術的開發背景、解析機理。受篇幅限制,只給出一個用基于事件迭代器的StAX API解析XML文件的典型使用方式。由于StAX的技術內涵豐富,功能很多,較深入的應用研究尚待繼續。

參 考 文 獻

[1]Eric Jendrock.The Java EE 5 Tutorial for Sun Java System Application Server Platform[EB/OL].http://java.sun.com/javaee/5/docs/tutorial/doc.2007-02[2007-07].

[2]Peter Nehrer.使用StAX解析XML,第1部分:Streaming API for XML (StAX) 簡介[EB/OL].http://www.ibm.com/developerworks/cn/xml/x-stax1.html.(2007-03-02)[2007-07].

[3]Elliotte Rusty Harold.An Introduction to StAX[ EB/OL ].http://www.xml.com/pub/a/2003/09/17/StAX.html.(2003-09-17)[2007-07].

[4]魚雷,李暉,陳娟.VTD-XML解析技術研究[J].現代電子技術,2006,29(21):72-74.

[5]張忠平.XML文檔相似性度量方法研究[J].現代電子技術,2007,30(4):165-168.

注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。

主站蜘蛛池模板: 中文字幕在线欧美| 亚洲欧美一级一级a| 2021国产精品自拍| 免费毛片网站在线观看| 国产精品无码影视久久久久久久| 尤物国产在线| 成年人视频一区二区| 欧美福利在线| a级毛片一区二区免费视频| 国产91成人| 免费又爽又刺激高潮网址| 国产va欧美va在线观看| 欧美精品啪啪| 极品国产一区二区三区| 制服无码网站| 久久久久亚洲Av片无码观看| 欧美成人日韩| 伊大人香蕉久久网欧美| 欧美一级在线看| 亚洲国产精品一区二区高清无码久久| 亚洲视频影院| 啪啪啪亚洲无码| 亚洲天堂区| 国产又大又粗又猛又爽的视频| 欧美精品一区在线看| 国产精品无码AⅤ在线观看播放| 欧美精品v欧洲精品| 国产高清在线精品一区二区三区| 国产Av无码精品色午夜| 国产女同自拍视频| 亚洲经典在线中文字幕| 亚洲精品在线观看91| 小说区 亚洲 自拍 另类| 国产精彩视频在线观看| 91精品国产自产在线观看| 伊在人亞洲香蕉精品區| 99热这里只有精品在线观看| AV熟女乱| 国产黄在线免费观看| 野花国产精品入口| 欧美劲爆第一页| 亚洲男人的天堂网| 热思思久久免费视频| 亚洲精品国产首次亮相| 久久精品一品道久久精品| 国产人成在线观看| 九九久久精品免费观看| 亚洲全网成人资源在线观看| 国产精品久久自在自2021| 国产国模一区二区三区四区| 欧美色视频在线| 国产欧美视频在线| 扒开粉嫩的小缝隙喷白浆视频| 尤物亚洲最大AV无码网站| 男女猛烈无遮挡午夜视频| 五月婷婷导航| 韩日午夜在线资源一区二区| 99久久精品无码专区免费| 欧美午夜在线观看| 国产亚洲视频在线观看| 亚洲国产精品VA在线看黑人| 亚洲va在线∨a天堂va欧美va| 四虎成人在线视频| 特级毛片免费视频| 在线免费观看a视频| 制服丝袜 91视频| 欧美成在线视频| 久久久波多野结衣av一区二区| 亚洲男女在线| 高h视频在线| 国产91成人| 国产国拍精品视频免费看| 亚洲综合第一区| 国产69精品久久久久孕妇大杂乱| 亚洲成在人线av品善网好看| 高清免费毛片| 亚洲黄网在线| 国产综合另类小说色区色噜噜 | 日韩精品一区二区三区免费| 欧美亚洲欧美| 欧美不卡二区| 91香蕉视频下载网站|