自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

淺談J2ME中XML被第三方API NanoXML解析

開發(fā)
本文將簡(jiǎn)單談?wù)刋ML在J2ME中被KXML與NanoXML解析,希望通過(guò)本文能對(duì)大家了解XML有所幫助。

對(duì)于J2ME這類開發(fā)平臺(tái)來(lái)說(shuō),XML有其優(yōu)勢(shì)。智能手機(jī)硬件和3G將移動(dòng)應(yīng)用放大到更加廣闊的范圍,本文將介紹的是XML在J2ME中被KXML與NanoXML解析,也是J2ME開發(fā)的一個(gè)重點(diǎn)。

要使用XML作為網(wǎng)絡(luò)中傳輸通訊,勢(shì)必在傳輸雙方的發(fā)送方跟接收端都具備對(duì)XML文件的解析能力才能實(shí)現(xiàn)正常的數(shù)據(jù)交換并完成通訊過(guò)程。由于在移動(dòng)設(shè)備硬件中的CPU跟內(nèi)存的不足,跟網(wǎng)絡(luò)傳輸速率的欠缺,而且解析XML需要消耗更多的資源,因此使得XML在移動(dòng)設(shè)備中的使用收到了限制,在更多時(shí)候我們采用的是采用基于基本數(shù)據(jù)流的形式(如J2ME中的DataInputStream和DataOutputStream)在讀取和發(fā)送數(shù)據(jù)。然而,隨著智能手機(jī)硬件的提高跟普及以及3G網(wǎng)絡(luò)的落實(shí),使得在不久我們將能無(wú)顧慮地在移動(dòng)通訊中使用XML了。

在J2ME體系中,對(duì)xml的解析有比較有名的第三方解析API,分別為KXML和NanoXML,他們都提供了對(duì)解析xml的支持。KXML在解析XML過(guò)程中會(huì)對(duì)文件內(nèi)容一層一層進(jìn)行解析,因此成為增量式解析器,比較適合大文件的解析。而NanoXML是一次性解析器,在一次時(shí)間里就把整個(gè)xml文檔解析完,因此不適合大文件的解析,會(huì)造成內(nèi)存不足的現(xiàn)象。有關(guān)這兩種解析器網(wǎng)上都有介紹過(guò),在這里對(duì)它們的使用進(jìn)行總結(jié)。

一、創(chuàng)建實(shí)例對(duì)象

1、使用NanoXML時(shí)由于是一次性機(jī)制,因此將xml數(shù)據(jù)流一次性封裝創(chuàng)建解析實(shí)例對(duì)象kXMLElement
 

  1. view plaincopy to clipboardprint?  
  2.  /**    
  3. HttpConnection conn;    
  4. String xml;    
  5. Reader r;    
  6. */    
  7. //......獲取網(wǎng)絡(luò)連接對(duì)象或者其他形式數(shù)據(jù)對(duì)象     
  8.  InputStreamReader isrDoc =     
  9.  new InputStreamReader(conn.openInputStream());//獲取輸入流,這里以HttpConnection為例     
  10.  kXMLElement kXMLeroot = new kXMLElement();//創(chuàng)建實(shí)例對(duì)象     
  11.  try {     
  12.   kXMLeroot.parseFromReader(isrDoc);     
  13.  }     
  14.  catch( kXMLParseException kpe ){     
  15. kpe.printStackTrace();     
  16.  }     
  17.  catch( IOException ie ){     
  18. ie.printStackTrace();     
  19. }     
  20.         
  21.  /**  
  22. HttpConnection conn;  
  23. String xml;  
  24. Reader r;  
  25. */  
  26. //......獲取網(wǎng)絡(luò)連接對(duì)象或者其他形式數(shù)據(jù)對(duì)象  
  27.  InputStreamReader isrDoc =  
  28.  new InputStreamReader(conn.openInputStream());//獲取輸入流,這里以HttpConnection為例  
  29.  kXMLElement kXMLeroot = new kXMLElement();//創(chuàng)建實(shí)例對(duì)象  
  30.  try {  
  31.   kXMLeroot.parseFromReader(isrDoc);  
  32.  }  
  33.  catch( kXMLParseException kpe ){  
  34. kpe.printStackTrace();  
  35.  }  
  36.  catch( IOException ie ){  
  37. ie.printStackTrace();  

2、使用kxml時(shí)首先需要得到一個(gè)XmlParser實(shí)例對(duì)象,在構(gòu)造方法中傳入Reader參數(shù)

  1. view plaincopy to clipboardprint?  
  2.  /**    
  3. HttpConnection conn;    
  4. String xml;    
  5. Reader r;    
  6. */    
  7. InputStreamReader isrDoc =     
  8.  new InputStreamReader(conn.openInputStream());//獲取輸入流,這里以HttpConnection為例     
  9.  XmlParser parser = new XmlParser(isrDoc);//創(chuàng)建實(shí)例對(duì)象    
  10.  /**  
  11. HttpConnection conn;  
  12. String xml;  
  13. Reader r;  
  14. */ 
  15. InputStreamReader isrDoc =  
  16.  new InputStreamReader(conn.openInputStream());//獲取輸入流,這里以HttpConnection為例  
  17.  XmlParser parser = new XmlParser(isrDoc);//創(chuàng)建實(shí)例對(duì)象 

二、KXML解析XML

  1.  view plaincopy to clipboardprint?  
  2. boolean parsing = true;//判斷是否到達(dá)***一個(gè)document標(biāo)簽     
  3. while()     
  4. {     
  5. ParseEvent event = parser.read();     
  6. swith(event.getType())     
  7. {     
  8. case Xml.START_TAG:     
  9. ....//處理開始標(biāo)簽tag     
  10. break;     
  11. case Xml.END_TAG:     
  12. ...//處理結(jié)束標(biāo)簽tag     
  13. break;     
  14. .......//其他標(biāo)簽處理     
  15. case Xml.END_DOCUMENT:     
  16. ...//最末tag     
  17. parsing = false;     
  18. break;     
  19. }     
  20. }    
  21. boolean parsing = true;//判斷是否到達(dá)***一個(gè)document標(biāo)簽  
  22. while()  
  23. {  
  24. ParseEvent event = parser.read();  
  25. swith(event.getType())  
  26. {  
  27. case Xml.START_TAG:  
  28. ....//處理開始標(biāo)簽tag  
  29. break;  
  30. case Xml.END_TAG:  
  31. ...//處理結(jié)束標(biāo)簽tag  
  32. break;  
  33. .......//其他標(biāo)簽處理  
  34. case Xml.END_DOCUMENT:  
  35. ...//最末tag  
  36. parsing = false;  
  37. break;  
  38. }  

三、NanoXML解析XML

  1. view plaincopy to clipboardprint?  
  2.  Vector list = kXMLeroot.getChildren();//獲取子節(jié)點(diǎn)列表     
  3.      Vector contents = new Vector();//用于獲取節(jié)點(diǎn)內(nèi)容     
  4.      for(int i = 0; i < list.size(); ++i){     
  5.    kXMLElement node = (kXMLElement) list.elementAt(i);     
  6.    String tag = node.getTagName();     
  7.    if(tag == nullcontinue;     
  8.    if(!tag.equals( "item" )) continue;     
  9.    contents.addElement(node.getContents());     
  10.    }     
  11.      String[] contentStrs = new String[contents.size()];//轉(zhuǎn)化為字符串?dāng)?shù)組    
  12.  Vector list = kXMLeroot.getChildren();//獲取子節(jié)點(diǎn)列表  
  13.      Vector contents = new Vector();//用于獲取節(jié)點(diǎn)內(nèi)容  
  14.      for(int i = 0; i < list.size(); ++i){  
  15.    kXMLElement node = (kXMLElement) list.elementAt(i);  
  16.    String tag = node.getTagName();  
  17.    if(tag == nullcontinue;  
  18.    if(!tag.equals( "item" )) continue;  
  19.    contents.addElement(node.getContents());  
  20.    }  
  21.      String[] contentStrs = new String[contents.size()];//轉(zhuǎn)化為字符串?dāng)?shù)組 

NanoXML是一個(gè)能在CLDC 環(huán)境下運(yùn)行的開放源代碼,NanoXML是非常小(6KB)的一步XML解析器;KXML是一個(gè)只占很小存儲(chǔ)空間的XML語(yǔ)法分析程序,對(duì)于J2ME應(yīng)用程序非常適合。

原文標(biāo)題:J2ME中KXML與NanoXML解析XML總結(jié)

鏈接:http://www.cnblogs.com/psunny/archive/2009/09/25/1573839.html

【編輯推薦】

  1. .NET對(duì)象的XML序列化和反序列化概念淺析
  2. Linq實(shí)現(xiàn)XML轉(zhuǎn)換淺談
  3. 簡(jiǎn)述C# XML解析方法的特點(diǎn)及應(yīng)用
  4. 淺析C# XML解析實(shí)例
  5. C# Lambda Expression使用實(shí)例解析
責(zé)任編輯:彭凡 來(lái)源: 博客園
相關(guān)推薦

2010-09-30 12:53:00

J2MECSS

2019-07-30 11:35:54

AndroidRetrofit庫(kù)

2010-09-29 08:57:04

J2ME前景

2010-09-29 15:35:04

Item類J2ME

2010-09-29 16:20:06

J2MEWeb服務(wù)API

2009-07-14 18:03:43

Myeclipse J

2009-07-07 11:10:01

JSP實(shí)現(xiàn)通信

2015-11-05 16:44:37

第三方登陸android源碼

2010-09-29 13:50:31

J2MEJ2SE

2010-10-09 14:29:44

J2MEfontcolor

2010-09-29 12:45:50

J2ME

2009-06-23 11:30:16

RMSJ2ME

2010-09-30 16:06:21

J2ME平臺(tái)

2011-12-02 10:37:14

JavaJ2ME

2010-09-29 10:15:35

JDKJ2EEJ2SE

2010-09-29 09:19:39

J2ME開發(fā)工具

2010-10-09 15:07:09

J2MEWeb服務(wù)

2009-10-10 13:54:20

OPhone

2010-09-29 09:59:22

J2ME配置

2014-07-23 08:55:42

iOSFMDB
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)