XmlPullParser 学习笔记

    在j2me有限的资源上去解释xml是比较慢的,所以j2se上的xml类库是不适合用在j2me上,而 XmlPullParser 用起来速度快,而且包也很小。
需求是解释一个标准的wml。比如:
xml 代码
 
  1. <?xml version="1.0"?>  
  2. <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">  
  3. <wml>  
  4. <card id="index" title="天速">  
  5. <p align="center">天速科技</p>  
  6. <p align="center"><a href="http://wap.gd.monternet.com/reversesubscribe?SPID=819758&amp;ServiceID=03020047"> 动漫天下 </a></p>  
  7. <p align="center"><a 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>  
  8. <p align="center"><a href="http://wap.gd.monternet.com/reversesubscribe?SPID=819758&amp;ServiceID=04070717&amp;SPURL=http://211.155.31.143/eb/allBook.a">  风月书斋 </a></p>  
  9.   
  10. </card> </wml>  

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

现在我们来看下我们解释wml的java文件
java 代码
  1. import java.io.ByteArrayInputStream;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import org.kxml2.io.KXmlParser;
  5. import org.xmlpull.v1.XmlPullParser;
  6. import org.xmlpull.v1.XmlPullParserException;
  7. import org.xmlpull.v1.XmlPullParserFactory;
  8. public class Test {
  9. //private static String xml = " apple"
  10. // + "orange" + "pear";
  11. private static String xml =""+"+"\"http://www.wapforum.org/DTD/wml_1.1.xml\">"+""+"" +"天速科技" +"动漫天下"+"
  12. 国色天香"+"风月书斋"+" ";

  13. public static void main(String args[])throws XmlPullParserException, IOException {
  14.      ByteArrayInputStream bin = new ByteArrayInputStream(xml.getBytes());
  15.     InputStreamReader in = new InputStreamReader(bin);
  16.     KXmlParser parser = new KXmlParser();
  17.     parser.setInput(in);
  18.     int eventType = parser.getEventType();
  19.     while (eventType != XmlPullParser.END_DOCUMENT) {
  20.     if (eventType == XmlPullParser.START_DOCUMENT) {
  21.          //System.out.println("Start document:");
  22.     else if (eventType == XmlPullParser.END_DOCUMENT) {
  23.          //System.out.println("End document");
  24.     else if (eventType == XmlPullParser.START_TAG) {
  25.          System.out.println(" " + parser.getName());
  26.          //System.out.println("Start Count: " + parser.getAttributeCount());
  27.          int size = parser.getAttributeCount();
  28.          for(int i=0; i
  29.          System.out.println(" " + parser.getAttributeName(i));
  30.          System.out.println(" " + parser.getAttributeValue(i));
  31.          }
  32.     else if (eventType == XmlPullParser.END_TAG) {
  33.         System.out.println(" " + parser.getName());
  34.     else if (eventType == XmlPullParser.TEXT) {
  35.          System.out.println(" " + parser.getText());
  36.     }
  37.     eventType = parser.next();
  38. }
  39. }


现在解释下上面的东西,
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解释并绘制在手机上还是要花相当的时间的。
 
 import java.io.InputStream; 
 import java.util.ArrayList;
 import java.util.List; 
 import org.xmlpull.v1.XmlPullParser; 
 import android.util.Xml; 
 import lee.vo.Person; 
 public class XMLPullService { 
      public List<Person> readXML(InputStream inStream) throws Exception{ 
          List<Person> persons = null; 
          Person person = null; 
          XmlPullParser pullParser = Xml.newPullParser();
          //获取Pull解析器 Xml.newPullParser()添加一个pullParser解析器带命名空间的支持 
          pullParser.setInput(inStream, "UTF-8");
          //设置Pull解析器进行解析的XML内容 
          int event = pullParser.getEventType();    //获取第一个事件 
          while(event!=XmlPullParser.END_DOCUMENT)  //如果还不是结束文档事件,迭代每一个元素 
          {     switch (event) 
                { 
                    case XmlPullParser.START_DOCUMENT: //开始文档事件 
 
                        persons = new ArrayList<Person>(); 
                        break; 
                    case XmlPullParser.START_TAG: //开始元素事件 
                        if("person".equals(pullParser.getName()))
                            //pullParser.getName()得到当前指针所指向的节点的名称 
                        { 
                             person = new Person(); 
                             int id = new Integer(pullParser.getAttributeValue(0)); 
                             person.setId(id); 
                         } 
                        if(person!=null)
                        { 
                            if("name".equals(pullParser.getName()))
                            { 
                                 String name = pullParser.nextText(); 
                                 //得到当前节点下一个文本节点的内容------> <name>liming</name> 得到liming 
                                 person.setName(name); 
                             } 
                             else if("age".equals(pullParser.getName())) 
                             { 
                                 String age = pullParser.nextText(); //获取下一个Text类型节点的值 
                                 person.setAge(new Short(age));
                              }
                        } 
                        break; 
                    case XmlPullParser.END_TAG: //结束元素事件 
                        if("person".equals(pullParser.getName())) 
                        { 
                            persons.add(person); 
                            person = null; 
                         } 
                         break; 
                   } 
                   event = pullParser.next(); //进入下一个元素并触发相应事件
             } 
         return persons; 
    }
 }
 
转自: http://blog.sina.com.cn/s/blog_77f2a2c10100r0bk.html
 

你可能感兴趣的:(java,xml,String,null,import,j2me)