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

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

我的需求是解释一个标准的wml。比如:
<? 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 ="天速" >
< align ="center" > 天速科技 </ p >
< align ="center" >< href ="http://wap.gd.monternet.com/reversesubscribe?SPID=819758&amp;ServiceID=03020047" >  动漫天下  </ a ></ p >
< align ="center" >< href ="http://wap.gd.monternet.com/reversesubscribe?SPID=819758&amp;ServiceID=03020048&amp;SPURL=http://211.155.31.143/t/viewPic.a?picId=1308" >  国色天香  </ a ></ p >
< align ="center" >< href ="http://wap.gd.monternet.com/reversesubscribe?SPID=819758&amp;ServiceID=04070717&amp;SPURL=http://211.155.31.143/eb/allBook.a" >   风月书斋  </ a ></ p >

</ card >   </ wml >
 

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

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


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;
/**
 * <b>类名:Test.java</b> </br> 编写日期: 2006-12-28 <br/> 程序功能描述: <br/> Demo: <br/>
 * Bug: <br/>
 * 
 * 程序变更日期 :<br/> 变更作者 :<br/> 变更说明 :<br/>
 * 
 * 
@author wuhua </br> <a href="mailto:rrq12345@163.com">rrq12345@163.com</a>
 
*/

public   class  Test  {

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

    
private static String 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="/t/main.a"> 动漫天下 </a></p>"
    
+"<p align="center"><a href="/t/main.a"> 国色天香 </a></p>"
    
+"<p align="center"><a href="/eb/main.a">  风月书斋 </a></p>"

    
+"</card> </wml>";
    
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<size; 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();
        }

    }


}


现在我们来看下我们解释wml的java文件
现在解释下上面的东西,
XmlPullParser 只是个规范,可以到 http://xmlpull.org/ 下载。我们来看看这个规范要求我们做些什么。
里面主要的方法有
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解释并绘制在手机上还是要花相当的时间的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值