J2EE/XML開發(fā)者通常都是使用文檔對(duì)象模型(DOM)API或簡(jiǎn)單的API for XML(SAX) API來(lái)分析XML文檔。然而,這些API都有其缺點(diǎn)。其中,DOM API的缺點(diǎn)之一是消耗大量的內(nèi)存,因?yàn)樵谠揦ML文檔可以被導(dǎo)航之前,必須創(chuàng)建一個(gè)完整的XML文檔的內(nèi)存結(jié)構(gòu)。而SAX API的缺點(diǎn)在于,它實(shí)例了一種推分析模型API,其中分析事件是由分析器生成的。比較之下,StAX則是基于一種拉分析模型。在本文中,你將首先創(chuàng)建你自己的XML文檔,然后學(xué)習(xí)使用各種不同方法來(lái)對(duì)之進(jìn)行分析;最后,我們使用事件生成的StAX拉方法。 一、 推分析之于拉分析 比較于推分析,拉分析具有如下一些優(yōu)點(diǎn): 1. 在拉分析中,事件是由分析應(yīng)用程序生成的,因此把分析規(guī)則提供到客戶端而不是分析器。 2. 拉分析的代碼更簡(jiǎn)單并且它比推分析有更少的庫(kù)。 3. 拉分析客戶端能同時(shí)讀多個(gè)XML文檔。 4. 拉分析允許你過(guò)濾XML文檔并且跳過(guò)分析事件。 二、 了解StAX 針對(duì)于XML的流式API(StAX),是在2004年3月的JSR 173規(guī)范中引入,這是一種針對(duì)XML的流式拉分析API。StAX是JDK 6.0提供的一種新特征,你可以從此處下載它的測(cè)試版本試用。 一個(gè)推模型分析器不斷地生成事件,直到XML文檔被完全分析結(jié)束。但是,拉分析由應(yīng)用程序進(jìn)行調(diào)整;因此,分析事件是由應(yīng)用程序生成的。這意味著,使用StaX,你可以推遲分析-在分析時(shí)跳過(guò)元素并且分析多個(gè)文檔。在使用DOM API的時(shí)候,你必須把整個(gè)的XML文檔分析成一棵DOM結(jié)構(gòu),這樣也就降低了分析效率。而借助于StAX,在分析XML文檔時(shí)生成分析事件。有關(guān)于StAX分析器與其它分析器的比較在此不多介紹。 StAX API的實(shí)現(xiàn)是使用了Java Web服務(wù)開發(fā)(JWSDP)1.6,并結(jié)合了Sun Java流式XML分析器(SJSXP)-它位于javax.xml.stream包中。XMLStreamReader接口用于分析一個(gè)XML文檔,而XMLStreamWriter接口用于生成一個(gè)XML文檔。XMLEventReader負(fù)責(zé)使用一個(gè)對(duì)象事件迭代子分析XML事件-這與XMLStreamReader所使用的光標(biāo)機(jī)制形成對(duì)照。本教程將基于JDK 6.0中的StAX實(shí)現(xiàn)來(lái)完成對(duì)一個(gè)XML文檔的分析。 其實(shí),StaX僅僅是JDK 6.0所提供的XML新特征之一。新的JDK 6.0還提供了對(duì)針對(duì)于XML-Web服務(wù)的Java架構(gòu)(JAX-WS)2.0,針對(duì)于XML綁定的Java API(JAXB) 2.0,XML數(shù)字簽名API的支持,甚至還支持SQL:2003 ‘XML‘?dāng)?shù)據(jù)類型。 三、 初步安裝 如果你正在使用JDK 6.0,那么默認(rèn)情況下,StAX API位于Classpath中。如果你在使用JWSDP 1.6,請(qǐng)把JWSDP 1.6 StAX API添加到classpath中。這需要把<jwsdp-1.6>\sjsxp\lib\ jsr173_api.jar和<jwsdp-1.6>\sjsxp\lib\sjsxp.jar添加到CLASSPATH變量中。在<jwsdp-1.6>目錄下安裝JWSDP 1.6。Jsr173_api.jar相應(yīng)于JSR-173 API JAR,Sjsxp.jar相應(yīng)于SJXSP實(shí)現(xiàn)JAR。
|
|
來(lái)自: bluecrystal > 《XML》