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

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

xml 代码


 

<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<card id="index" title="天速">
<p align="center">天速科技</p>
<p align="center"><a href="http://wap.gd.monternet.com/reversesubscribe?SPID=819758&ServiceID=03020047"> 动漫天下 </a></p>
<p align="center"><a href="http://wap.gd.monternet.com/reversesubscribe?SPID=819758&ServiceID=03020048&SPURL=http://211.155.31.143/t/viewPic.a?picId=1308"> 国色天香 </a></p>
<p align="center"><a href="http://wap.gd.monternet.com/reversesubscribe?SPID=819758&ServiceID=04070717&SPURL=http://211.155.31.143/eb/allBook.a">  风月书斋 </a></p>
  
</card> </wml>



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



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

java 代码


/********************************************************************
 * 项目名称 :j2me学习 J2me Wap Explorer 
 * 
 * Copyright 2005-2006 Wuhua. All rights reserved 
 *
 * 本程序只用于学习目的,不能用于商业目的。如有需要请联系作者
 ********************************************************************/

import
import
import

import
import
import
import
/**
 * 类名:Test.java 
 编写日期: 2006-12-28 
 程序功能描述: 
 Demo:  * Bug: 
 * 
 * 程序变更日期 :
 变更作者 :
 变更说明 : * 
 * @author wuhua 
 */
public class

//private static String xml = " <list><item>apple</item>"</list> 
// + "<item>orange</item>" + "<item>pear</item>";

private static String xml =""
"
"\"http://www.wapforum.org/DTD/wml_1.1.xml\">"
"<wml>"</wml>
"<card title="\"天速\"" id="\&quot;index\"">"</card>
" 天速科技
"  动漫天下 
"  国色天香 
"  风月书斋 

" "; 
public static void

throws


new
new
new
 parser.setInput(in); 

int
while
if
//System.out.println("Start document:");
else if
//System.out.println("End document");
else if
" "
//System.out.println("Start Count: " + parser.getAttributeCount());
int
for(int i=0; i
" "
" "
 } 


else if
" "
else if
" "
 } 
 eventType = parser.next(); 
 } 
 } 

}


现在解释下上面的东西,


XmlPullParser 只是个规范,可以到

http://xmlpull.org/ 下载。我们来看看这个规范要求我们做些什么。


里面主要的方法有

java 代码




//定义一个事件采用回调的方式,直到读取xml完毕。
public int getEventType() throws
//遍历下一个事件,返回一个事件的类型
public int next() throws
//得到当前Tag名字
public
//获取文本
public

//得到当前Tag下面的属性数量
public int
//得到当前Tag下面指定位置的属性名称
public String getAttributeName(int

//得到当前Tag下面指定位置的属性植
public String getAttributeValue(int



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


啊就是kxml。


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