隨筆-30  評(píng)論-123  文章-0  trackbacks-0

          摘要
          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)生。下面是各種解析方法之間的比較:

          ?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中得到實(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ù)。。。


          評(píng)論:
          # re: 在JDK6.0中用StAX解析XML 2012-03-22 10:38 | findkalex
          博客很漂亮~  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 图片| 潞西市| 吴堡县| 揭西县| 锡林郭勒盟| 永泰县| 嘉义市| 广州市| 翁牛特旗| 温泉县| 安达市| 永州市| 准格尔旗| 建始县| 罗平县| 长海县| 金山区| 当雄县| 班戈县| 吕梁市| 原平市| 临邑县| 大余县| 宁陵县| 将乐县| 吴川市| 内乡县| 阿城市| 周宁县| 武城县| 鄂托克旗| 桂平市| 仙游县| 清河县| 镇巴县| 江阴市| 酒泉市| 昔阳县| 贵港市| 太保市| 韶关市|