基于j2me xml解释 引擎 XmlPullParser 的例子

阅读更多
基于j2me xml解释 引擎 XmlPullParser 的例子
这几天一直在思考怎么样设计Wap的引擎。因为在j2me有限的资源上去解释xml是比较慢的,所以j2se上的xml类库是不适合用在j2me上,后来在网上查找了下发现了XmlPullParser ,而且用起来速度快,而且包也很小。现在把这两天学到的知识记录下来。

我的需求是解释一个标准的wml。比如:
xml 代码

上面是个简单的wml源文件。不过现在的wap网站差不都这样,基本上没有script,跟html上的各个控件。所以能解释上面的文档,基本上都是可以满足我的需求的。
java 代码
  1. /******************************************************************** 
  2.  * 项目名称             :j2me学习 J2me Wap Explorer            
     
  3.  *  
  4.  * Copyright 2005-2006 Wuhua. All rights reserved 
     
  5.  * 
  6.  * 本程序只用于学习目的,不能用于商业目的。如有需要请联系作者 
  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.  * 类名:Test.java 
     编写日期: 2006-12-28 
     程序功能描述: 
     Demo: 
     
  18.  * Bug: 
     
  19.  *  
  20.  * 程序变更日期 :
     变更作者 :
     变更说明 :
     
  21.  *  
  22.  * @author wuhua 
     
    [email protected] 
  23.  */  
  24. public class Test {  
  25.   
  26.     //private static String xml = "apple"  
  27.         //  + "orange" + "pear";  
  28.   
  29.     private static String xml =""  
  30.     +"
  31.     +"\"http://www.wapforum.org/DTD/wml_1.1.xml\">"  
  32.     +""  
  33.     +""  
  34.     +"天速科技

    "  
  35.     +" 动漫天下 

    "  
  36.     +" 国色天香 

    "  
  37.     +"  风月书斋 

    "  
  38.   
  39.     +" ";  
  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
  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. }  

现在我们来看下我们解释wml的java文件
现在解释下上面的东西,
XmlPullParser 只是个规范,可以到 http://xmlpull.org/ 下载。我们来看看这个规范要求我们做些什么。
里面主要的方法有
java 代码
  1. //定义一个事件采用回调的方式,直到读取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下面的属性数量
  10. public int getAttributeCount() ;
  11. //得到当前Tag下面指定位置的属性名称
  12. public String getAttributeName(int index);

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

我们理解了XmlPullParser 可以自己实现一个XmlPullParser。不过java世界里好东西就是多。已经有人帮我们做了。
啊就是kxml。
这个API本身很简单。当时要把一个完整的wml解释并绘制在手机上还是要花相当的时间的。

你可能感兴趣的:(XML,WAP,Apple,J2SE)