飛艷小屋

          程序--人生--哲學___________________歡迎艷兒的加入

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            52 Posts :: 175 Stories :: 107 Comments :: 0 Trackbacks
          stax(simple stream api for xml)作為jsr已經(jīng)出現(xiàn)幾年時間了,可能不如sax,dom(及其他基于其上的工具包比如jdom,jaxp,etc)為眾人所知。可能也是因為最近xfire的火熱 導致它的知名度有所提升吧。(題 外話,好象有不少知識點一直都是默默無聞的,只有隨著某項技術(shù)的流行才突然變的為人所知道了,比如ThreadLocal本來我們一直沒有接觸,很多人可能一直都不知道它的存在,但隨著它在spring ,hibernate這些流行的技術(shù)里的靈巧的應(yīng)用,一下子就被很多人談及及應(yīng)用了。可見我們的水平還是屬于跟在老外屁股后面跑的水平)。
          通過和dom,sax這兩種大家熟知的xml解析方式的比較,可以容易的看出它的特點。
          dom通過把整個tree 文檔讀入內(nèi)存進行操作,可以隨意對文檔進行操作,非常靈活。但缺點是對內(nèi)存的資源耗費比較大。
          sax不同于dom把整個文檔讀入內(nèi)存的方式,它是直接對 xml文件進行操作。速度快,基本上不占用什么內(nèi)存資源。缺點看看它的名字就知道了(simple api for xml),基于event的方式(這點和stax類似),但是是通過callback的方式把對xml的遍歷權(quán)交給sax parser了。這樣導致我們不能靈活控制對xml文件的訪問。

          stax通過stream的方式來解決sax,dom各自的缺點,同時具有他們大部分的優(yōu)點(我想底層實現(xiàn)是不是通過直接操作文件流的方式,還沒有看它的實現(xiàn)的src,不敢亂說)。stax主要有兩中粒度不同的操作方式 ,一種基于event, 另一種更底層的實現(xiàn)基于cursor。初一看實現(xiàn)方式有點象sax,因為都是基于event的。但是sax把訪問控制權(quán)交給parser(通過callback))了,我們很難控制iterat過程。stax允許我們自己控制iterat.
          所以stax的優(yōu)點如下:基于stream的方式,不象dom耗費內(nèi)存資源。又可以自己控制對xml的iterat,不象sax把控制權(quán)交給parser).還有一個優(yōu)點就是可以在iterat的過程中隨時cancel。雖然sax 也可以通過 throw saxexception的方式中斷iterat過程,但畢竟不是一中優(yōu)美的解決方案。當然stax的還提供了以stream的方式進行write xml的操作。

          ?具體的stax應(yīng)用可以看ibm的系列教程文章,比較老了了點。http://www-128.ibm.com/developerworks/xml/library/x-tipstx/

          具體實現(xiàn),除了bea的一個ri實現(xiàn)外,不知道還有其他的實現(xiàn)沒有(stax jsr好象最早由bea提出來)?

          個人感覺stax的應(yīng)用還是有些麻煩,期待(或則是不是已經(jīng)有了?)能有更高層次的封裝(類似于jdom,jaxp實現(xiàn)之類的)。

          posted on 2006-06-16 14:21 天外飛仙 閱讀(361) 評論(0)  編輯  收藏 所屬分類: XML
          主站蜘蛛池模板: 南投市| 舟山市| 筠连县| 射阳县| 盘山县| 胶州市| 崇阳县| 扶绥县| 曲阳县| 凌云县| 泾源县| 稷山县| 永春县| 和龙市| 绵竹市| 申扎县| 福贡县| 镇坪县| 布尔津县| 恭城| 澎湖县| 呼图壁县| 重庆市| 南平市| 车致| 封开县| 高青县| 札达县| 黄梅县| 阿克陶县| 潍坊市| 水城县| 吉木萨尔县| 安新县| 微山县| 万源市| 楚雄市| 姚安县| 安康市| 玛沁县| 博客|