饒榮慶 -- 您今天UCWEB了嗎?--http://www.ucweb.com

          3G 手機開發(fā)網(wǎng)

             :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            99 Posts :: 1 Stories :: 219 Comments :: 0 Trackbacks
          這幾天一直在思考怎么樣設計Wap的引擎。因為在j2me有限的資源上去解釋xml是比較慢的,所以j2se上的xml類庫是不適合用在j2me上,后來 在網(wǎng)上查找了下發(fā)現(xiàn)了XmlPullParser ,而且用起來速度快,而且包也很小。現(xiàn)在把這兩天學到的知識記錄下來。

          我的需求是解釋一個標準的wml。比如:
          xml 代碼
          1. xml version="1.0"?>
          2. >
          3. <wml>
          4. <card id="index" title="天速">
          5. <p align="center">天速科技p>
          6. <p align="center"><a > 動漫天下 a>p>
          7. <p align="center"><a > 國色天香 a>p>
          8. <p align="center"><a > 風月書齋 a>p>

          9. card> wml>

          上面是個簡單的wml源文件。不過現(xiàn)在的wap網(wǎng)站差不都這樣,基本上沒有script,跟html上的各個控件。所以能解釋上面的文檔,基本上都是可以滿足我的需求的。
          java 代碼
          1. /******************************************************************** 
          2.  * 項目名稱             :<b>j2me學習 J2me Wap Explorer</b>            <br/> 
          3.  *  
          4.  * Copyright 2005-2006 Wuhua. All rights reserved </br> 
          5.  * 
          6.  * 本程序只用于學習目的,不能用于商業(yè)目的。如有需要請聯(lián)系作者 
          7.  ********************************************************************/  
          8.   
          9. import java.io.ByteArrayInputStream;  
          10. import java.io.IOException;  
          11. import java.io.InputStreamReader;  
          12.   
          13. import org.kxml2.io.KXmlParser;  
          14. import org.xmlpull.v1.XmlPullParser;  
          15. import org.xmlpull.v1.XmlPullParserException;  
          16. /** 
          17.  * <b>類名:Test.java</b> </br> 編寫日期: 2006-12-28 <br/> 程序功能描述: <br/> Demo: <br/> 
          18.  * Bug: <br/> 
          19.  *  
          20.  * 程序變更日期 :<br/> 變更作者 :<br/> 變更說明 :<br/> 
          21.  *  
          22.  * @author wuhua </br> <a href="mailto:rrq12345@163.com">rrq12345@163.com</a> 
          23.  */  
          24. public class Test {  
          25.   
          26.     //private static String xml = "<list><item>apple</item>"  
          27.         //  + "<item>orange</item>" + "<item>pear</item></list>";  
          28.   
          29.     private static String xml ="<?xml version=\"1.0\"?>"  
          30.     +"<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\" "   
          31.     +"\"http://www.wapforum.org/DTD/wml_1.1.xml\">"  
          32.     +"<wml>"  
          33.     +"<card id=\"index\" title=\"天速\">"  
          34.     +"<p align=\"center\">天速科技</p>"  
          35.     +"<p align=\"center\"><a href=\"/t/main.a\"> 動漫天下 </a></p>"  
          36.     +"<p align=\"center\"><a href=\"/t/main.a\"> 國色天香 </a></p>"  
          37.     +"<p align=\"center\"><a href=\"/eb/main.a\">  風月書齋 </a></p>"  
          38.   
          39.     +"</card> </wml>";  
          40.     public static void main(String args[])  
          41.   
          42.     throws XmlPullParserException, IOException {  
          43.            
          44.            
          45.         ByteArrayInputStream bin = new ByteArrayInputStream(xml.getBytes());  
          46.         InputStreamReader in = new InputStreamReader(bin);  
          47.         KXmlParser parser = new KXmlParser();  
          48.         parser.setInput(in);  
          49.        
          50.         int eventType = parser.getEventType();  
          51.         while (eventType != XmlPullParser.END_DOCUMENT) {  
          52.             if (eventType == XmlPullParser.START_DOCUMENT) {  
          53.                 //System.out.println("Start document:");  
          54.             } else if (eventType == XmlPullParser.END_DOCUMENT) {  
          55.                 //System.out.println("End document");  
          56.             } else if (eventType == XmlPullParser.START_TAG) {  
          57.                 System.out.println("  " + parser.getName());  
          58.                 //System.out.println("Start Count: " + parser.getAttributeCount());  
          59.                 int  size = parser.getAttributeCount();  
          60.                 for(int i=0; i<size; i++){  
          61.                     System.out.println("  " + parser.getAttributeName(i));  
          62.                     System.out.println("  " + parser.getAttributeValue(i));  
          63.                 }  
          64.                    
          65.                   
          66.             } else if (eventType == XmlPullParser.END_TAG) {  
          67.                 System.out.println(" " + parser.getName());  
          68.             } else if (eventType == XmlPullParser.TEXT) {  
          69.                 System.out.println("  " + parser.getText());  
          70.             }  
          71.             eventType = parser.next();  
          72.         }  
          73.     }  
          74.   
          75. }  

          現(xiàn)在我們來看下我們解釋wml的java文件
          現(xiàn)在解釋下上面的東西,
          XmlPullParser 只是個規(guī)范,可以到http://xmlpull.org/ 下載。我們來看看這個規(guī)范要求我們做些什么。
          里面主要的方法有
          java 代碼
          1. //定義一個事件采用回調(diào)的方式,直到讀取xml完畢。
          2. public int getEventType() throws XmlPullParserException ;
          3. //遍歷下一個事件,返回一個事件的類型
          4. public int next() throws XmlPullParserException, IOException
          5. //得到當前Tag名字
          6. public String getName();
          7. //獲取文本
          8. public String getText();

          9. //得到當前Tag下面的屬性數(shù)量
          10. public int getAttributeCount() ;
          11. //得到當前Tag下面指定位置的屬性名稱
          12. public String getAttributeName(int index);

          13. //得到當前Tag下面指定位置的屬性植
          14. public String getAttributeValue(int index);

          我們理解了XmlPullParser 可以自己實現(xiàn)一個XmlPullParser。不過java世界里好東西就是多。已經(jīng)有人幫我們做了。
          啊就是kxml。
          這個API本身很簡單。當時要把一個完整的wml解釋并繪制在手機上還是要花相當?shù)臅r間的。


          爬蟲工作室 -- 專業(yè)的手機軟件開發(fā)工作室
          3G視線 -- 專注手機軟件開發(fā)
          posted on 2007-05-10 09:13 3G工作室 閱讀(2656) 評論(0)  編輯  收藏 所屬分類: j2me 入門
          主站蜘蛛池模板: 曲麻莱县| 淄博市| 曲周县| 贡山| 西青区| 玛沁县| 平湖市| 彭阳县| 利津县| 康保县| 丰台区| 上犹县| 清镇市| 柏乡县| 朝阳县| 嵊泗县| 宜黄县| 梧州市| 鹿邑县| 莒南县| 博罗县| 宁阳县| 土默特右旗| 金昌市| 香格里拉县| 永和县| 大关县| 罗田县| 宝山区| 鲜城| 三河市| 中卫市| 兴业县| 阳城县| 长沙县| 察雅县| 酉阳| 乐昌市| 贵定县| 会宁县| 武城县|