摘要
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="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</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
学二的猫 阅读(4616)
评论(1) 编辑 收藏 所属分类:
Java禅机