package com.bawei.day14_xmlpull;
import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List;
import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException;
import android.os.Bundle; import android.app.Activity; import android.util.Xml; import android.view.Menu; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.TextView;
public class MainActivity extends Activity {
private ListView mStuListView; private List<Student> stus;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView tv=(TextView) findViewById(R.id.tv); mStuListView = (ListView) findViewById(R.id.stuList); try { //调用方法 parseStudent(getAssets().open("persons.xml")); if (stus != null && stus.size() > 0) { ArrayAdapter<Student> adapter = new ArrayAdapter<Student>(this, android.R.layout.simple_list_item_1, stus); mStuListView.setAdapter(adapter); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
}
private List<Student> parseStudent(InputStream is) { stus = new ArrayList<Student>(); //创建pull解析器 XmlPullParser parser = Xml.newPullParser(); try { //把需要解析的数据添加到解析器中,并设置数据格式 parser.setInput(is, "utf-8"); //通过解析器触发第一次事件,并获取事件类型码 int eventType = parser.getEventType(); //定义用来存储标签名称的变量 String tagName = ""; Student stu = null; //判断是否解析到文档末尾,没有则循环解析 while (eventType != XmlPullParser.END_DOCUMENT) { switch (eventType) { //开始解析文档 case XmlPullParser.START_DOCUMENT: break; //开始解析标签 case XmlPullParser.START_TAG: //得到标签名字 tagName = parser.getName(); //判断正在接戏的元素标签是否是person if ("person".equals(tagName)) { stu = new Student(); stu.setId(Integer.valueOf(parser.getAttributeValue(0)));
} break; //解析到文本 case XmlPullParser.TEXT: //得到当前正在解析的文本内容 String text = parser.getText(); if (stu != null) { //判断正在解析的文本内容是哪个元素节点里的 if ("name".equals(tagName)) { stu.setName(text); } else if ("age".equals(tagName)) { stu.setAge(Integer.parseInt(text)); } } break; //解析到结束标签 case XmlPullParser.END_TAG: //得到正在解析的元素标签名 tagName = parser.getName(); //得到正在解析的元素标签名是否是person if ("person".equals(tagName)) { stus.add(stu); stu = null;
}
tagName = ""; break;
} //本次事件处理完毕,进入下一个节点,下一个事件 eventType = parser.next(); } } catch (XmlPullParserException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ try { if(is!=null){ is.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
return stus; }
}
|