路是爬出来的

XmlPullParser 的例子

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



     我的需求是解释一个标准的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">  风月书斋 </a></p>  

  10.   

  11. </card> </wml>  



上面是个简单的wml源文件。不过现在的wap网站差不都这样,基本上没有script,跟html上的各个控件。所以能解释上面的文档,基本上都是可以满足我的需求的。



 现在我们来看下我们解释wml的java文件
java 代码


 


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

  2.  * 项目名称             :<b>j2me学习 J2me Wap Explorer</b>            <br/> 

  3.  *  

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

  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. 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\">  风月书斋 </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.   








现在解释下上面的东西,

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.   

  10. //得到当前Tag下面的属性数量  

  11. public int getAttributeCount() ;  

  12. //得到当前Tag下面指定位置的属性名称  

  13. public String getAttributeName(int index);  

  14.   

  15. //得到当前Tag下面指定位置的属性植  

  16. public String getAttributeValue(int index);  





我们理解了XmlPullParser 可以自己实现一个XmlPullParser。不过java世界里好东西就是多。已经有人帮我们做了。

啊就是kxml。

这个API本身很简单。当时要把一个完整的wml解释并绘制在手机上还是要花相当的时间的。

posted on 2006-12-30 09:06 路是爬出来的 阅读(554) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航: