摘要
J2EE/XML開發人員一般都用DOM(Document Object Model,文檔對象模型)API或者(SAX Simple API for XML)來解析XML文件。這些API各有利弊。DOM API對內存要求高,因為用DOM操縱XML文件需要先將整個XML文件的結構保存到內存中。而SAX API是一個推式解析模型,解析事件由解析器產生。與上面兩種方式不同,StAX基于拉式解析模型。在本文中,我們首先建立一個XML文件,然后運用事件生成的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. 拉式解析
和推式解析相比,拉式解析具有以下優點:
1、在拉式解析中,事件是由解析應用產生的,因此拉式解析中向客戶端提供的是解析規則,而不是解析器。
2、同推式解析相比,拉式解析的代碼更簡單,而且不用那么多庫。
3、拉式解析客戶端能夠一次讀取多個XML文件。
4、拉式解析允許你過濾XML文件和跳過解析事件。
進入StAX的世界
StAX是Streaming API for XML的縮寫,它包含在2004年3月的JSR 173 中。StAX是JDK6.0中包含的新特性。
在推式模型中,直到整個XML文件全部被解析,解析器才會產生解析事件。而拉式解析由應用程序來控制,也就是說解析事件由應用程序產生。這就意味著,你可以暫緩解析、解析時跳過某個元素或者同時解析多個文件。用DOM解析式要先將XML文件解析成DOM結構,因此降低了解析效率。使用StAX,解析事件在XML文件解析過程中產生。下面是各種解析方法之間的比較:
?XML Parser API Feature Summary
Feature
|
StAX
|
SAX
|
DOM
|
TrAX
|
API Type
|
Pull, streaming
|
Push, streaming
|
In memory tree
|
XSLT Rule
|
Ease of Use
|
High
|
Medium
|
High
|
Medium
|
XPath Capability
|
No
|
No
|
Yes
|
Yes
|
CPU and Memory Efficiency
|
Good
|
Good
|
Varies
|
Varies
|
Forward Only
|
Yes
|
Yes
|
No
|
No
|
Read XML
|
Yes
|
Yes
|
Yes
|
Yes
|
Write XML
|
Yes
|
No
|
Yes
|
Yes
|
Create, Read, Update, Delete
|
No
|
No
|
Yes
|
No
|
StAX API同樣也在JWSDP(Java Web Services Developer Pack )1.6中得到實現,你可以在包javax.xml.stream 中找到它。XMLStreamReader接口用來解析XML文件。XMLStreamWriter接口用來生成XML文件,XMLEventReader用一個對象事件迭代器來解析XML事件。與之相反,XMLStreamReader采用的是游標機制。
前期準備
如果你正在用JDK1.6,那么StAX API已經在默認的路徑下了。如果你在用JWSDP 1.6,你需要添加JWSDP 1.6 StAX API到指定路徑下。將<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 是 JSR-173 API的JAR。
未完,待續。。。
posted on 2006-06-29 20:53
學二的貓 閱讀(4629)
評論(1) 編輯 收藏 所屬分類:
Java禪機