public class PersonDefaultHandler extends DefaultHandler {
private List persons;
private Person person ; //记录当前person
private String perTag; //记录前一个标签的名称
/**
* 重写父类的开始文档方法。用于初始化
*/
@Override
public void startDocument() throws SAXException {
persons = new ArrayList();
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if(“person”.equals(localName)){
Integer id = new Integer(attributes.getValue(0)); //取id
person = new Person();
person.setId(id);
}
perTag = localName;
}
/**参数:
* ch 整个XML字符串
* start 节点值在整个XML字符串中的索引位置
* length 节点值的长度
*/
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if(perTag!=null){
String data = new String(ch,start,length);
if(“name”.equals(perTag)){
person.setName(data);
}else if(“age”.equals(perTag)){
person.setAge(new Short(data));
}
}
}
public static List getPersons() throws Exception{
List persons = null;
Person person = null;
XmlPullParser parser= Xml.newPullParser();
InputStream inStream = PullPersonService.class.getClassLoader().getResourceAsStream(“person.xml”);
parser.setInput(inStream, “UTF-8″);
int eventType = parser.getEventType(); //触发第一个事件
while(eventType!=XmlPullParser.END_DOCUMENT){
switch(eventType){
case XmlPullParser.START_DOCUMENT:
persons = new ArrayList();
break;
case XmlPullParser.START_TAG: //开始元素事件
if(“person”.equals(parser.getName())){
person = new Person();
person.setId(new Integer(parser.getAttributeValue(0)));
}else if(person!=null){
if(“name”.equals(parser.getName())){
person.setName(parser.nextText());
}else if(“age”.equals(parser.getName())){
person.setAge(new Short(parser.nextText()));
}
}
break;
case XmlPullParser.END_TAG: //结束元素事件
if(“person”.equals(parser.getName())){
persons.add(person);
person = null;
}
break;