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