程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> J2ME中KXML與NanoXML解析XML總結

J2ME中KXML與NanoXML解析XML總結

編輯:關於JAVA

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應用程序非常適合。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved