即興的靈感

          思維是一種藝術; 藝術需要靈感。

          博客好友

          最新評論

          J2ME中KXML與NanoXML解析XML總結

          ?????? XML全稱為EXtensible Markup Language,中文稱為可擴展標記語言,是一種計算機所能理解的信息符號語言。計算機之間可以通過此種標記語言處理包含各種信息的文章等功能。由于XML是一種允許相關人士自由決定的標記語言,所以稱語言的可擴展性。XML作為一個標準,而且由于XML是一種純文本格式存儲文件,從而使得XML本身具備了很好的跨平臺的特點,因此被廣泛應用于網絡數據交換的各個領域,包括網絡通訊、不同程序語言平臺之間的數據交流等方面。
          ??? 要使用XML作為網絡中傳輸通訊,勢必在傳輸雙方的發送方跟接收端都具備對XML文件的解析能力才能實現正常的數據交換并完成通訊過程。由于在移動設備硬件中的CPU跟內存的不足,跟網絡傳輸速率的欠缺,而且解析XML需要消耗更多的資源,因此使得XML在移動設備中的使用收到了限制,在更多時候我們采用的是采用基于基本數據流的形式(如J2ME中的DataInputStream和DataOutputStream)在讀取和發送數據。然而,隨著智能手機硬件的提高跟普及以及3G網絡的落實,使得在不久我們將能無顧慮地在移動通訊中使用XML了。
          ??? 在J2ME體系中,對xml的解析有比較有名的第三方解析API,分別為KXML和NanoXML,他們都提供了對解析xml的支持。KXML在解析XML過程中會對文件內容一層一層進行解析,因此成為增量式解析器,比較適合大文件的解析。而NanoXML是一次性解析器,在一次時間里就把整個xml文檔解析完,因此不適合大文件的解析,會造成內存不足的現象。有關這兩種解析器網上都有介紹過,在這里對它們的使用進行總結。
          ??? 一、創建實例對象
          ??? 1、使用NanoXML時由于是一次性機制,因此將xml數據流一次性封裝創建解析實例對象kXMLElement
          ??? /**
          ??? HttpConnection conn;
          ??? String xml;
          ??? Reader r;
          ??? */
          ??? ?//......獲取網絡連接對象或者其他形式數據對象
           InputStreamReader isrDoc =
           new InputStreamReader(conn.openInputStream());//獲取輸入流,這里以HttpConnection為例
           kXMLElement kXMLeroot = new kXMLElement();//創建實例對象
           try {
           ?kXMLeroot.parseFromReader(isrDoc);
           }
           catch( kXMLParseException kpe ){
          ????????? kpe.printStackTrace();
           }
           catch( IOException ie ){
          ???????? ?ie.printStackTrace();
          ??? }
          ???
          ??? 2、使用kxml時首先需要得到一個XmlParser實例對象,在構造方法中傳入Reader參數
          ??? /**
          ??? HttpConnection conn;
          ??? String xml;
          ??? Reader r;
          ??? */
          ??? InputStreamReader isrDoc =
           new InputStreamReader(conn.openInputStream());//獲取輸入流,這里以HttpConnection為例
           XmlParser parser = new XmlParser(isrDoc);//創建實例對象

          ??? 二、KXML解析XML
          ??? boolean parsing = true;//判斷是否到達最后一個document標簽
          ??? while()
          ??? {
          ??????? ParseEvent event = parser.read();
          ?????? ?swith(event.getType())
          ? ?{
          ????? ? case Xml.START_TAG:
          ??????? ?....//處理開始標簽tag
          ?????????break;
          ????? ?? case Xml.END_TAG:
          ??????? ?...//處理結束標簽tag
          ???????? break;
          ????? ?? .......//其他標簽處理
          ???? ?? case Xml.END_DOCUMENT:
          ????? ??...//最末tag
          ????????? parsing = false;
          ???????? break;
          ??? ?}
          ??? }

          ???? 三、NanoXML解析XML
          ???? Vector list = kXMLeroot.getChildren();//獲取子節點列表
          ???? Vector contents = new Vector();//用于獲取節點內容
          ???? for(int i = 0; i < list.size(); ++i){
             kXMLElement node = (kXMLElement) list.elementAt(i);
             String tag = node.getTagName();
             if(tag == null) continue;
             if(!tag.equals( "item" )) continue;
             contents.addElement(node.getContents());
             }
          ???? String[] contentStrs = new String[contents.size()];//轉化為字符串數組

          ??? NanoXML是一個能在CLDC 環境下運行的開放源代碼,NanoXML是非常小(6KB)的一步XML解析器;KXML是一個只占很小存儲空間的XML語法分析程序,對于J2ME應用程序非常適合。

          (轉載時請注明出處并保持鏈接,作為對作者辛勤勞動的尊重,謝謝。)

          ?
          鳳凰涅槃/浴火重生/馬不停蹄/只爭朝夕
          ???? 隱姓埋名/低調華麗/簡單生活/完美人生

          posted on 2009-02-25 01:28 poetguo 閱讀(2161) 評論(0)  編輯  收藏 所屬分類: J2ME

          主站蜘蛛池模板: 区。| 达日县| 广宗县| 分宜县| 额济纳旗| 六枝特区| 南宁市| 双江| 西和县| 吴江市| 邵武市| 揭阳市| 东兰县| 田林县| 治县。| 孟津县| 阜宁县| 乌恰县| 澄江县| 洞头县| 介休市| 汉阴县| 荔浦县| 河曲县| 陕西省| 乐至县| 黄山市| 故城县| 南部县| 通榆县| 丹凤县| 海安县| 三门峡市| 融水| 淮安市| 安徽省| 武平县| 武城县| 龙山县| 仲巴县| 松原市|