飛艷小屋

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

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

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

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

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

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

          posted on 2006-06-16 14:21 天外飛仙 閱讀(363) 評論(0)  編輯  收藏 所屬分類: XML
          主站蜘蛛池模板: 铁岭县| 杂多县| 黔南| 逊克县| 晋江市| 静宁县| 隆回县| 乐东| 如东县| 竹溪县| 建始县| 海原县| 图们市| 清远市| 合江县| 广昌县| 息烽县| 灵宝市| 忻城县| 信宜市| 仁怀市| 高淳县| 清徐县| 化隆| 衡山县| 双辽市| 陇川县| 长岛县| 安康市| 阳曲县| 湛江市| 军事| 新宁县| 梁河县| 高平市| 常山县| 安宁市| 白玉县| 游戏| 伊吾县| 阿拉尔市|