解析xml除了SAX方式还有PULL方式,这种方式也是基于事件驱动的,与SAX方式一样,它就是PULL方式。只不过PULL方式读xml回调方法返回的是数字。

读取到xml的声明返回      START_DOCUMENT

读取到xml的结束返回       END_DOCUMENT

读取到xml的开始标签返回 START_TAG

读取到xml的结束标签返回 END_TAG 

读取到xml的文本返回       TEXT

_ueditor_page_break_tag_

一个例子:

   //获取存入的xml字符串
  String PaiMaiXML=load();
  List<String> data = new ArrayList<String>();
  data.add("车牌列表");
  ByteArrayInputStream tInputStringStream = null;
  try
    {
    if (PaiMaiXML != null && !PaiMaiXML.trim().equals("")) {
     tInputStringStream = new ByteArrayInputStream(PaiMaiXML.getBytes());
    }
    }
    catch (Exception e) {
     // TODO: handle exception
     //tv1.setText(e.getMessage());
     return;
    }
  XmlPullParser parser = Xml.newPullParser();
    try {
     parser.setInput(tInputStringStream, "UTF-8");
     int eventType = parser.getEventType();
     
     //List<PaiMaiInfo> PaiMaiList=new ArrayList<PaiMaiInfo>;
     
     while (eventType != XmlPullParser.END_DOCUMENT) {
      switch (eventType) {
      case XmlPullParser.START_DOCUMENT:// 文档开始事件,可以进行数据初始化处理
      // persons = new ArrayList<Person>();
       break;
      case XmlPullParser.START_TAG:// 开始元素事件
       String name = parser.getName();
       if (name.equalsIgnoreCase("Base_tabletNumber")) {
        // currentPerson = new Person();
        // currentPerson.setId(new
        // Integer(parser.getAttributeValue(null, "id")));
        
        //tv1.setText(parser.nextText());
        data.add(parser.nextText());
       } 
//        else if (currentPerson != null) {
//        if (name.equalsIgnoreCase("loginlink")) {
//         currentPerson.setName(parser.nextText());// 如果后面是Text节点,即返回它的值
//        } else if (name.equalsIgnoreCase("errmsg")) {
//         currentPerson.setAge(new Short(parser.nextText()));
//        }
//       }
       break;
      case XmlPullParser.END_TAG:// 结束元素事件
//       if (parser.getName().equalsIgnoreCase("person")
//         && currentPerson != null) {
//        persons.add(currentPerson);
//        currentPerson = null;
//       }
       break;
      }
      eventType = parser.next();
     }
     tInputStringStream.close();
     // return persons;
    } catch (XmlPullParserException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
    ListView listView = (ListView) findViewById(R.id.listView1); 
    listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,data));

上面这段代码是处理xml字符串形式的,xml文件略作处理即可。即转文件流:

InputStream inputStream=null;             
//得到文件流,并设置编码方式
inputStream=this.context.getResources().getAssets().open(xmlPath);
parser.setInput(inputStream, "utf-8");

和上面的对比

tInputStringStream = new ByteArrayInputStream(PaiMaiXML.getBytes());
parser.setInput(tInputStringStream, "UTF-8");

 

 

最后修改:2013 年 09 月 04 日
如果觉得我的文章对你有用,请随意赞赏