Pull 解析相同Tag标签的XML文件

需要解析的XML格式 在这里, 有两个name相同的标签,
解析的时候,我们不能用 pull.next()方法,这个在4.0的时候, 并不能推到下一个标签。我们需要用pull.nextTag(),方法,他这个能往下一个标签执行。 到最后结束的时候, 我们需要在 end_document中直接退出, 按常规的,他会报 end_document is null 。 为什么会这样,不清楚。 具体解析看代码:

package com.demo.thread;

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

import org.xmlpull.v1.XmlPullParser;

 
import android.content.Context;
import android.util.Xml;

import com.demo.R;
import com.demo.bean.School;
import com.demo.bean.Student;

public class XmlPullThread extends Thread{
private Context context;
public XmlPullThread(Context context){
this.context = context;
}
@Override
public void run() {
super.run();
InputStream in = context.getResources().openRawResource(R.raw.test);
getSchoolData(in);
}

public School getSchoolData(InputStream in){
try{
School school = null;
Student student = null;
String tageName = null;
List studenList = null;
XmlPullParser pull = Xml.newPullParser();
pull.setInput(in, "UTF-8");
int event = pull.getEventType(); 
String currentTage  = null;
while (event != XmlPullParser.END_DOCUMENT) {
switch (event) {
case XmlPullParser.START_TAG: 
tageName = pull.getName();
if ("school".equals(tageName)) {
school = new School();
studenList = new ArrayList();
currentTage = "school";
}else if ("name".equals(tageName)) {
if("school".equals(currentTage)){
school.setName(pull.nextText());
}else if("student".equals(currentTage)){
student.setName(pull.nextText());
}else if ("student".equals(tageName)) {
student = new Student();
currentTage = "student";
}else if ("sex".equals(tageName)) {
student.setSex(pull.nextText());
}
break;
case XmlPullParser.END_TAG:
if ("student".equals(pull.getName())) {
studenList.add(student);
student = null;
}else if("school".equals(pull.getName())){  
school.setStudenList(studenList);
System.out.println(school.getStudenList().size()")
return school;
}
break;
default:
break;
}
event = pull.nextTag();// 进入下一个元素并触发相应事件,如果用next                                                           的话,4.0并不会指到下一个标签。
}
return school;
}catch(Exception e){
e.printStackTrace();
}
return null;
}
}
通过设置  当前的大的类Tag的值,来获取相同Tag中不同的值。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值