首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

android使用pull的方式解析xml

android使用pull的方式解析xml

上次已经说过使用sax解析xml了,实际上还可以使用pull解析xml.这样的方式效率也是比较高的。pull不仅可以在android上使用也可以用在javaee里面,需要的就是pull的jar包。这次的xml也使用上次的那个,如下所示
view plain
<?xml version="1.0" encoding="UTF-8"?>
<persons>
  <person id="01">
     <name>will</name>
     <age>21</age>
  </person>
  <person id="02">
     <name>will2</name>
     <age>22</age>
  </person>
</persons>
下面就来写一个解析xml的类,解析的流程如下
(1)取得pull解析器
(2)设置解析器的输入流
(3)产生第一个事件
(4)开始解析
(5)解析结束
view plain
package org.lxh.impl;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.lxh.vo.Person;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import android.util.Log;
import android.util.Xml;
public class Parse2 {
  public List<Person> getPersons(InputStream in) throws Throwable{
      Person p=null;
      List<Person> persons=null;
      XmlPullParser parser=Xml.newPullParser();
      parser.setInput(in, "UTF-8");
      int event=parser.getEventType();//产生第一个事件
      while(event!=XmlPullParser.END_DOCUMENT){  //如果不是文档结束事件
          switch(event){
           case XmlPullParser.START_DOCUMENT:
               persons=new ArrayList<Person>();  //在文档的开始实例化集合
               break;
           case XmlPullParser.START_TAG:
               String name=parser.getName();//取得当前解析器指向的元素名称
               if("person".equals(name)){
                   p=new Person();
                   p.setId(parser.getAttributeValue(0));
               }
               if(p!=null){
                   if("name".equals(name)){
                       p.setName(parser.nextText()); //取得当前解析器指向的下一个元素的文本节点
                   }
                   if("age".equals(name)){
                       p.setAge(Integer.parseInt(parser.nextText()));
                   }
               }
               break;
           case XmlPullParser.END_TAG:
               if("person".equals(parser.getName())){  //person标签结束就把数据存入集合
                   persons.add(p);
                   //p=null;
               }
               break;
          }
          event=parser.next();
      }
      return persons;
  }


}
返回列表