2006-12-29
XmlPullParser 的例子
这几天一直在思考怎么样设计Wap的引擎。因为在j2me有限的资源上去解释xml是比较慢的,所以j2se上的xml类库是不适合用在j2me上,后来在网上查找了下发现了XmlPullParser ,而且用起来速度快,而且包也很小。现在把这两天学到的知识记录下来。
我的需求是解释一个标准的wml。比如:
上面是个简单的wml源文件。不过现在的wap网站差不都这样,基本上没有script,跟html上的各个控件。所以能解释上面的文档,基本上都是可以满足我的需求的。
现在我们来看下我们解释wml的java文件
现在解释下上面的东西,
XmlPullParser 只是个规范,可以到http://xmlpull.org/ 下载。我们来看看这个规范要求我们做些什么。
里面主要的方法有
我们理解了XmlPullParser 可以自己实现一个XmlPullParser。不过java世界里好东西就是多。已经有人帮我们做了。
啊就是kxml。
这个API本身很简单。当时要把一个完整的wml解释并绘制在手机上还是要花相当的时间的。
我的需求是解释一个标准的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 java.io.ByteArrayInputStream;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import org.kxml2.io.KXmlParser;
- import org.xmlpull.v1.XmlPullParser;
- import org.xmlpull.v1.XmlPullParserException;
- import org.xmlpull.v1.XmlPullParserFactory;
- /**
- * 类名:Test.java
编写日期: 2006-12-28
程序功能描述:
Demo:
- * Bug:
- *
- * 程序变更日期 :
变更作者 :
变更说明 :
- *
- * @author wuhua
rrq12345@163.com - */
- public class Test {
- //private static String xml = "
- apple "
- // + "
- orange
" + "- pear
"; - private static String xml =""
- +"
- +"\"http://www.wapforum.org/DTD/wml_1.1.xml\">"
- +"
" - +"
" - +"
天速科技
" - +" "
- 动漫天下 "
- +" "
- +" "
- 风月书斋 "
- +" ";
- public static void main(String args[])
- throws XmlPullParserException, IOException {
- ByteArrayInputStream bin = new ByteArrayInputStream(xml.getBytes());
- InputStreamReader in = new InputStreamReader(bin);
- KXmlParser parser = new KXmlParser();
- parser.setInput(in);
- int eventType = parser.getEventType();
- while (eventType != XmlPullParser.END_DOCUMENT) {
- if (eventType == XmlPullParser.START_DOCUMENT) {
- //System.out.println("Start document:");
- } else if (eventType == XmlPullParser.END_DOCUMENT) {
- //System.out.println("End document");
- } else if (eventType == XmlPullParser.START_TAG) {
- System.out.println(" " + parser.getName());
- //System.out.println("Start Count: " + parser.getAttributeCount());
- int size = parser.getAttributeCount();
- for(int i=0; i
- System.out.println(" " + parser.getAttributeName(i));
- System.out.println(" " + parser.getAttributeValue(i));
- }
- } else if (eventType == XmlPullParser.END_TAG) {
- System.out.println(" " + parser.getName());
- } else if (eventType == XmlPullParser.TEXT) {
- System.out.println(" " + parser.getText());
- }
- eventType = parser.next();
- }
- }
- }
现在解释下上面的东西,
XmlPullParser 只是个规范,可以到http://xmlpull.org/ 下载。我们来看看这个规范要求我们做些什么。
里面主要的方法有
java 代码
- //定义一个事件采用回调的方式,直到读取xml完毕。
- public int getEventType() throws XmlPullParserException ;
- //遍历下一个事件,返回一个事件的类型
- public int next() throws XmlPullParserException, IOException
- //得到当前Tag名字
- public String getName();
- //获取文本
- public String getText();
- //得到当前Tag下面的属性数量
- public int getAttributeCount() ;
- //得到当前Tag下面指定位置的属性名称
- public String getAttributeName(int index);
- //得到当前Tag下面指定位置的属性植
- public String getAttributeValue(int index);
我们理解了XmlPullParser 可以自己实现一个XmlPullParser。不过java世界里好东西就是多。已经有人帮我们做了。
啊就是kxml。
这个API本身很简单。当时要把一个完整的wml解释并绘制在手机上还是要花相当的时间的。
评论
wuhua
2007-01-08
哈哈。谢谢关注与支持,我会继续努力搞好自己的blog,并且多与大家交流技术,希望可以相互提高各自的水平,这样可以更深入的去探讨比较东西。
tianshui
2007-01-08
-.-我是初学者
经常关注楼主的帖子 收获很大
经常关注楼主的帖子 收获很大
wuhua
2007-01-04
在设计的过程中发现容错性是很重要的。
我现在就遇到这个问题,解释wml的时候,遇到 这些特殊符合就抛出异常。很是郁闷。主要的是kml抛出异常后,就停止解释了。要改装下它。不过wml文件是否很标准也一定要解释完毕。就想firefox解释html一样。
我现在就遇到这个问题,解释wml的时候,遇到 这些特殊符合就抛出异常。很是郁闷。主要的是kml抛出异常后,就停止解释了。要改装下它。不过wml文件是否很标准也一定要解释完毕。就想firefox解释html一样。
alin_ass
2007-01-04
我用kml实现过类似burlap的玩意,现在JDK6.0已经有实现了StAX(JSR 173)
不过这一块挺适合重复造轮子的,我原来碰到就是公司有xml协议不是规范的,比如<class#>什么这种,就自己改kml
不过这一块挺适合重复造轮子的,我原来碰到就是公司有xml协议不是规范的,比如<class#>什么这种,就自己改kml
taowen
2007-01-04
pull parser为什么快?sax parser为什么慢?我觉得这是关键。我曾经在delphi上把一个sax parser改装成pull parser。其实很简单,只要把回调的API改成基于循环的主动查询。做的是减法。
为你而来
2007-01-04
支持,继续努力!!!!
- 浏览: 562665 次
- 性别:

- 来自: 广州

- 详细资料
搜索本博客
我的相册
我女朋友
共 12 张
共 12 张
最新评论
-
Google产品大全
很全很全很全很全
-- by sheandwei -
说真的UCWEB看奥运真方便
楼下的。话不能这么说。我现在上班开奥运就靠它了,
-- by wuhua -
说真的UCWEB看奥运真方便
傻佬,这也值得说
-- by caohj -
UCWEB使用秘诀
最近发现UCWEB有准备发布新版本了。到时再仔细研究相关的一些特殊用法。
-- by wuhua -
开始进入另外一个领域
自己的水平还很菜啊。要努力学习
-- by wuhua






评论排行榜