Android中使用PULL方式解析XML文件

下面我们通过Demo例子来介绍如何使用PULL机制来解析XML文件。先看下如下工程的目录结构:

按以下步骤进行操作:

[1] 新建一个XML文件,命名为student.xml。同时把XML文件放置到assets目录下。student.xml文件的内容如下:

<?xml version="1.0" encoding="utf-8"?><students><student id="20110806100"><name>小明</name><age>22</age><sex>男</sex></student><student id="20110806101"><name>小李</name><age>24</age><sex>男</sex></student><student id="20110806102"><name>小丽</name><age>21</age><sex>女</sex></student></students>

[2] 根据XML文件中的节点目录,创建一个相对应的实体类,来保存解析的相应信息。在包:com.andyidea.entity下新建Student.java类。

package com.andyidea.entity;public class Student {private String id;private String name;private int age;private String sex;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}}

[3] 定义一个使用PULL解析XML文件的工具类:ParserByPULL.java。

package com.andyidea.util;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlPullParserFactory;import android.util.Xml;import com.andyidea.entity.Student;public class ParserByPULL {//采用XmlPullParser来解析XML文件public static List<Student> getStudents(InputStream inStream) throws Throwable{List<Student> students = null;Student mStudent = null;//========创建XmlPullParser,有两种方式=======//方式一:使用工厂类XmlPullParserFactoryXmlPullParserFactory pullFactory = XmlPullParserFactory.newInstance();XmlPullParser parser = pullFactory.newPullParser();//方式二:使用Android提供的实用工具类android.util.Xml//XmlPullParser parser = Xml.newPullParser();//解析文件输入流parser.setInput(inStream, "UTF-8");//产生第一个事件int eventType = parser.getEventType();//只要不是文档结束事件,就一直循环while(eventType!=XmlPullParser.END_DOCUMENT){switch (eventType){//触发开始文档事件case XmlPullParser.START_DOCUMENT:students = new ArrayList<Student>();break;//触发开始元素事件case XmlPullParser.START_TAG://获取解析器当前指向的元素的名称String name = parser.getName();if("student".equals(name)){//通过解析器获取id的元素值,,并设置student的idmStudent = new Student();mStudent.setId(parser.getAttributeValue(0));}if(mStudent!=null){if("name".equals(name)){//获取解析器当前指向元素的下一个文本节点的值mStudent.setName(parser.nextText());}if("age".equals(name)){//获取解析器当前指向元素的下一个文本节点的值mStudent.setAge(new Short(parser.nextText()));}if("sex".equals(name)){//获取解析器当前指向元素的下一个文本节点的值mStudent.setSex(parser.nextText());}}break;//触发结束元素事件case XmlPullParser.END_TAG://if("student".equals(parser.getName())){students.add(mStudent);mStudent = null;}break;default:break;}eventType = parser.next();}return students;}}

[4] 该Demo的入口类:MainActivity.java

package com.andyidea.xmlparser;import java.io.InputStream;import java.util.List;import com.andyidea.entity.Student;import com.andyidea.util.ParserByPULL;import android.app.Activity;import android.content.res.AssetManager;import android.os.Bundle;import android.util.Log;public class MainActivity extends Activity {/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);AssetManager asset = getAssets();try {InputStream input = asset.open("student.xml");List<Student> list = ParserByPULL.getStudents(input);for (Student stu : list) {Log.e("StudentInfo","Person ID: " + stu.getId() + ","+ stu.getName() + ", " + stu.getAge() + ", "+ stu.getSex());}} catch (Throwable e) {e.printStackTrace();}}}

[5]最后我们运行程序看看结果如下:

以上黑色方框中的内容就是采用PULL方式解析的结果。

那些曾经以为念念不忘的事情就在我们念念不忘的过程里,被我们遗忘了。

Android中使用PULL方式解析XML文件

相关文章:

你感兴趣的文章:

标签云: