摘要
J2EE/XML開發(fā)人員一般都用DOM(Document Object Model,文檔對(duì)象模型)API或者(SAX Simple API for XML)來解析XML文件。這些API各有利弊。DOM API對(duì)內(nèi)存要求高,因?yàn)橛肈OM操縱XML文件需要先將整個(gè)XML文件的結(jié)構(gòu)保存到內(nèi)存中。而SAX API是一個(gè)推式解析模型,解析事件由解析器產(chǎn)生。與上面兩種方式不同,StAX基于拉式解析模型。在本文中,我們首先建立一個(gè)XML文件,然后運(yùn)用事件生成的StAX拉式方法,采用不同的方法解析它。
<script type="text/javascript"><!--
google_ad_client = "pub-4751025308591894";
google_ad_width = 180;
google_ad_height = 60;
google_ad_format = "180x60_as_rimg";
google_cpa_choice = "CAAQqfyujAIaCL3B8SF26akaKO3M93M";
//--></script>
<script type="text/javascript" src="</script>
推式解析 vs. 拉式解析
和推式解析相比,拉式解析具有以下優(yōu)點(diǎn):
1、在拉式解析中,事件是由解析應(yīng)用產(chǎn)生的,因此拉式解析中向客戶端提供的是解析規(guī)則,而不是解析器。
2、同推式解析相比,拉式解析的代碼更簡(jiǎn)單,而且不用那么多庫。
3、拉式解析客戶端能夠一次讀取多個(gè)XML文件。
4、拉式解析允許你過濾XML文件和跳過解析事件。
進(jìn)入StAX的世界
StAX是Streaming API for XML的縮寫,它包含在2004年3月的JSR 173 中。StAX是JDK6.0中包含的新特性。
在推式模型中,直到整個(gè)XML文件全部被解析,解析器才會(huì)產(chǎn)生解析事件。而拉式解析由應(yīng)用程序來控制,也就是說解析事件由應(yīng)用程序產(chǎn)生。這就意味著,你可以暫緩解析、解析時(shí)跳過某個(gè)元素或者同時(shí)解析多個(gè)文件。用DOM解析式要先將XML文件解析成DOM結(jié)構(gòu),因此降低了解析效率。使用StAX,解析事件在XML文件解析過程中產(chǎn)生。下面是各種解析方法之間的比較:
StAX API同樣也在JWSDP(Java Web Services Developer Pack )1.6中得到實(shí)現(xiàn),你可以在包javax.xml.stream 中找到它。XMLStreamReader接口用來解析XML文件。XMLStreamWriter接口用來生成XML文件,XMLEventReader用一個(gè)對(duì)象事件迭代器來解析XML事件。與之相反,XMLStreamReader采用的是游標(biāo)機(jī)制。
前期準(zhǔn)備
如果你正在用JDK1.6,那么StAX API已經(jīng)在默認(rèn)的路徑下了。如果你在用JWSDP 1.6,你需要添加JWSDP 1.6 StAX API到指定路徑下。將<jwsdp-1.6>\sjsxp\lib\ jsr173_api.jar 和 <jwsdp-1.6>;\sjsxp\lib\sjsxp.jar添加到CLASSPATH環(huán)境變量中,安裝JWSDP 1.6到<jwsdp-1.6>目錄下,Jsr173_api.jar 是 JSR-173 API的JAR。
未完,待續(xù)。。。