android_xml解析之 使用PULL读取XML文件 .

 

除了可以使用 SAX和DOM解析XML文件,大家也可以使用Android内置的Pull解析器解析XML文件。 Pull解析器的运行方式与 SAX 解析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件。事件将作为数值代码被发送,因此可以使用一个switch对感兴趣的事件进行处理。当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型节点的值。

以下问使用pull解析器对xml文件进行解析的代码:

 

package com.test.service;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.xmlpull.v1.XmlPullParser;

import android.util.Xml;

import com.test.bean.Person;

public class PULLPersonService {
 
 public static  List<Person>  getPersons(InputStream inStream) throws Throwable {
  
  List<Person> persons =null;
  Person person  = null; 
  XmlPullParser XmlParser = Xml.newPullParser();
  XmlParser.setInput(inStream, "UTF-8");
  int eventType = XmlParser.getEventType(); //产生第一个事件。
  while(eventType!=XmlPullParser.END_DOCUMENT) {
   switch (eventType) {
   case XmlPullParser.START_DOCUMENT:
       persons  = new ArrayList<Person>();
    break;
   case XmlPullParser.START_TAG:
    String name = XmlParser.getName(); //获得当前解析器指向的元素的名称
    if(name.equals("person")){
       person = new Person();
       person.setId(new Integer(XmlParser.getAttributeValue(0)));
    }
    if(person!=null){
     if(name.equals("name")){
      person.setName(XmlParser.nextText());//获得当前解析器指向元素的下个文本节点的值
     }
     if(name.equals("age")){
      person.setAge(new Short(XmlParser.nextText() ));
     }
    }
    break;
    
   case XmlPullParser.END_TAG:
    if("person".equals(XmlParser.getName())){
     persons.add(person);
     person = null;
    }
    break;
   }
   eventType = XmlParser.next();
   
  }
  return persons; 
  
 }
 
 
 

}

 

 

下面为 单元测试代码:

 

 public void testPULLGetPersons() throws Throwable {

  InputStream inStreamForPull = this.getClass().getClassLoader()
    .getResourceAsStream("itcast.xml");
  List<Person> persons = PULLPersonService.getPersons(inStreamForPull);
  for (Person person : persons) {
   Log.i(TAG, person.toString());
  }
 }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值