android xml解析(二)

来源:互联网 发布:java dbcp连接池 编辑:程序博客网 时间:2024/04/26 03:02

android提供了一种新的解析XML的方式-------PULL,这种方式是android推荐使用的,它的代码简单,内容看起来更加紧凑与直观,解析方式性能上与SAX相近,都是使用事件驱动的方式进行解析,不同的是PULL返回的时间类型是整型.

过程如下:

创建工厂类XmlPullParserFactory factory = XmlPullParserFactory.newInstance();

申明工厂类支持命名空间factory.setNamespaceAware(true);

创建解析器 XmlPullParser xpp = factory.newPullParser();

设置解析内容xpp.setInput(getAssets().open("min.xml"), "UTF-8");

开始解析:

int eventType = xpp.getEventType();        
  while (eventType != XmlPullParser.END_DOCUMENT) {
    if(eventType == XmlPullParser.START_DOCUMENT) {      
    
     persons = new ArrayList<Person>();
    }else if(eventType == XmlPullParser.START_TAG) {            
     //Log.d("minrui","Start tag "+xpp.getName());
     if("person".equals(xpp.getName())){
         person = new Person();
      person.setId(new Integer(xpp.getAttributeValue(0)));
     }
     preTag = xpp.getName();
    } else if(eventType == XmlPullParser.END_TAG) {          
    // Log.d("minrui","End tag "+xpp.getName());
     if("person".equals(xpp.getName())&&person!=null){
      persons.add(person);
      person = null;
     }
     preTag = null;
    }else if(eventType == XmlPullParser.TEXT) {     
    // Log.d("minrui","Text "+xpp.getText());  
     if(person!=null){
      String data = xpp.getText();
      
      if("name".equals(preTag)){ 
       person.setName(data);   
      }else if ("age".equals(preTag)){
       person.setAge(new Short(data));
      }
     }
    }
    eventType = xpp.next();
  }

最后测试:

 List<Person> l = persons;
   for(int i=0;i<l.size();i++) {
    Person p = l.get(i);
    Log.d("minrui","p.getAge() = "+p.getAge());
    Log.d("minrui","p.getId() = "+p.getId());
    Log.d("minrui","p.getName() = "+p.getName());
   }

打出与上一节中相同的LOG

01-01 10:12:35.363: DEBUG/minrui(5080): p.getAge() = 30
01-01 10:12:35.363: DEBUG/minrui(5080): p.getId() = 0
01-01 10:12:35.363: DEBUG/minrui(5080): p.getName() = min
01-01 10:12:35.363: DEBUG/minrui(5080): p.getAge() = 25
01-01 10:12:35.363: DEBUG/minrui(5080): p.getId() = 1
01-01 10:12:35.363: DEBUG/minrui(5080): p.getName() = malone
可以看到,PULL的实现过程更加的简洁和明了.这种方法与SAX有共同的缺点,解析过程中如果出现错误,立即终止,要针对每一个XML文档写一个解析类,没有通用性

原创粉丝点击