路是爬出來的

          [導(dǎo)入]XmlPullParser 的例子

               這幾天一直在思考怎么樣設(shè)計Wap的引擎。因為在j2me有限的資源上去解釋xml是比較慢的,所以j2se上的xml類庫是不適合用在j2me上,后來在網(wǎng)上查找了下發(fā)現(xiàn)了XmlPullParser ,而且用起來速度快,而且包也很小。現(xiàn)在把這兩天學(xué)到的知識記錄下來。



               我的需求是解釋一個標(biāo)準(zhǔn)的wml。比如:

             

          java 代碼


           


          1. <?xml version="1.0"?>  

          2. <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"


          3. "http://www.wapforum.org/DTD/wml_1.1.xml">  

          4. <wml>  

          5. <card id="index" title="天速">  

          6. <p align="center">天速科技</p>  

          7. <p align="center"><a href="/t/main.a"> 動漫天下 </a></p>  

          8. <p align="center"><a href="/t/main.a"> 國色天香 </a></p>  

          9. <p align="center"><a href="/eb/main.a">  風(fēng)月書齋 </a></p>  

          10.   

          11. </card> </wml>  



          上面是個簡單的wml源文件。不過現(xiàn)在的wap網(wǎng)站差不都這樣,基本上沒有script,跟html上的各個控件。所以能解釋上面的文檔,基本上都是可以滿足我的需求的。



           現(xiàn)在我們來看下我們解釋wml的java文件
          java 代碼


           


          1. /******************************************************************** 

          2.  * 項目名稱             :<b>j2me學(xué)習(xí) J2me Wap Explorer</b>            <br/> 

          3.  *  

          4.  * Copyright 2005-2006 Wuhua. All rights reserved </br> 

          5.  * 

          6.  * 本程序只用于學(xué)習(xí)目的,不能用于商業(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. import org.xmlpull.v1.XmlPullParserFactory;  

          17. /** 

          18.  * <b>類名:Test.java</b> </br> 編寫日期: 2006-12-28 <br/> 程序功能描述: <br/> Demo: <br/> 

          19.  * Bug: <br/> 

          20.  *  

          21.  * 程序變更日期 :<br/> 變更作者 :<br/> 變更說明 :<br/> 

          22.  *  

          23.  * @author wuhua </br> <a href="mailto:rrq12345@163.com">rrq12345@163.com</a> 

          24.  */  

          25. public class Test {  

          26.   

          27.     //private static String xml = "<list><item>apple</item>"  

          28.         //  + "<item>orange</item>" + "<item>pear</item></list>";  

          29.   

          30.     private static String xml ="<?xml version=\"1.0\"?>"  

          31.     +"<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\" "   

          32.     +"\"http://www.wapforum.org/DTD/wml_1.1.xml\">"  

          33.     +"<wml>"  

          34.     +"<card id=\"index\" title=\"天速\">"  

          35.     +"<p align=\"center\">天速科技</p>"  

          36.     +"<p align=\"center\"><a href=\"/t/main.a\"> 動漫天下 </a></p>"  

          37.     +"<p align=\"center\"><a href=\"/t/main.a\"> 國色天香 </a></p>"  

          38.     +"<p align=\"center\"><a href=\"/eb/main.a\">  風(fēng)月書齋 </a></p>"  

          39.   

          40.     +"</card> </wml>";  

          41.     public static void main(String args[])  

          42.   

          43.     throws XmlPullParserException, IOException {  

          44.            

          45.            

          46.         ByteArrayInputStream bin = new ByteArrayInputStream(xml.getBytes());  

          47.         InputStreamReader in = new InputStreamReader(bin);  

          48.         KXmlParser parser = new KXmlParser();  

          49.         parser.setInput(in);  

          50.   

          51.         int eventType = parser.getEventType();  

          52.         while (eventType != XmlPullParser.END_DOCUMENT) {  

          53.             if (eventType == XmlPullParser.START_DOCUMENT) {  

          54.                 //System.out.println("Start document:");  

          55.             } else if (eventType == XmlPullParser.END_DOCUMENT) {  

          56.                 //System.out.println("End document");  

          57.             } else if (eventType == XmlPullParser.START_TAG) {  

          58.                 System.out.println("  " + parser.getName());  

          59.                 //System.out.println("Start Count: " + parser.getAttributeCount());  

          60.                 int  size = parser.getAttributeCount();  

          61.                 for(int i=0; i<size; i++){  

          62.                     System.out.println("  " + parser.getAttributeName(i));  

          63.                     System.out.println("  " + parser.getAttributeValue(i));  

          64.                 }  

          65.                    

          66.                   

          67.             } else if (eventType == XmlPullParser.END_TAG) {  

          68.                 System.out.println(" " + parser.getName());  

          69.             } else if (eventType == XmlPullParser.TEXT) {  

          70.                 System.out.println("  " + parser.getText());  

          71.             }  

          72.             eventType = parser.next();  

          73.         }  

          74.     }  

          75.   








          現(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. //得到當(dāng)前Tag名字  

          6. public String getName();  

          7. //獲取文本  

          8. public String getText();  

          9.   

          10. //得到當(dāng)前Tag下面的屬性數(shù)量  

          11. public int getAttributeCount() ;  

          12. //得到當(dāng)前Tag下面指定位置的屬性名稱  

          13. public String getAttributeName(int index);  

          14.   

          15. //得到當(dāng)前Tag下面指定位置的屬性植  

          16. public String getAttributeValue(int index);  





          我們理解了XmlPullParser 可以自己實現(xiàn)一個XmlPullParser。不過java世界里好東西就是多。已經(jīng)有人幫我們做了。

          啊就是kxml。

          這個API本身很簡單。當(dāng)時要把一個完整的wml解釋并繪制在手機上還是要花相當(dāng)?shù)臅r間的。


          文章來源: http://wuhua.javaeye.com/blog/41564

          posted on 2006-12-30 08:39 路是爬出來的 閱讀(1079) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 德兴市| 稻城县| 岳普湖县| 宾阳县| 枣阳市| 屏南县| 永善县| 新源县| 德州市| 唐海县| 安远县| 广德县| 铜陵市| 潞西市| 潼南县| 民丰县| 扬中市| 迁安市| 岚皋县| 金沙县| 县级市| 礼泉县| 漳州市| 陇西县| 桂阳县| 都安| 广宁县| 平湖市| 南部县| 明光市| 绥德县| 义乌市| 黄冈市| 铜川市| 花莲县| 建平县| 太和县| 大安市| 六安市| 乌审旗| 东辽县|