展会信息港展会大全

android使用PULL解析XML文件
来源:互联网   发布日期:2016-01-13 21:58:15   浏览:2833次  

导读:XmlPull和Sax类似,是基于流(stream)操作文件,然后根据节点事件回调开发者编写的处理程序。因为是基于流的处理,因此Xmlpull和 Sax都比较节约内存资源,不会象Dom那样要把所有节点以对橡树的形式展现在内存中......

XmlPull和Sax类似,是基于流(stream)操作文件,然后根据节点事件回调开发者编写的处理程序。因为是基于流的处理,因此Xmlpull和 Sax都比较节约内存资源,不会象Dom那样要把所有节点以对橡树的形式展现在内存中。 但Xmlpull比Sax更简明,而且不需要扫描完整个流。

下面来看一个pull解析xml的例子:

student.xml:

<?xml version="1.0" encoding="utf-8"?>

<root>

<student id="1" group="1">

<name>张三</name>

<sex>男</sex>

<age>18</age>

<email>zhangsan@163.com</email>

<birthday>1987-06-08</birthday>

<memo>好学生</memo>

</student>

<student id="2" group="2">

<name>李四</name>

<sex>女</sex>

<age>18</age>

<email>lisi@163.com</email>

<birthday>1987-06-08</birthday>

<memo>好学生</memo>

</student>

<student id="3" group="3">

<name>小王</name>

<sex>男</sex>

<age>18</age>

<email>xiaowang@163.com</email>

<birthday>1987-06-08</birthday>

<memo>好学生</memo>

</student>

<student id="4" group="4">

<name>小张</name>

<sex>男</sex>

<age>18</age>

<email>xiaozhang@163.com</email>

<birthday>1987-06-08</birthday>

<memo>好学生</memo>

</student>

<student id="5" group="5">

<name>小明</name>

<sex>男</sex>

<age>18</age>

<email>xiaoming@163.com</email>

<birthday>1987-06-08</birthday>

<memo>好学生</memo>

</student>

</root>

对应的bean:

public class Student {

private int id;

private int group;

private String name;

private String sex;

private int age;

private String email;

private String memo;

private String birthday;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public int getGroup() {

return group;

}

public void setGroup(int group) {

this.group = group;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getSex() {

return sex;

}

public void setSex(String sex) {

this.sex = sex;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getEmail() {

return email;

}

public void setEmail(String email) {

this.email = email;

}

public String getMemo() {

return memo;

}

public void setMemo(String memo) {

this.memo = memo;

}

public String getBirthday() {

return birthday;

}

public void setBirthday(String birthday) {

this.birthday = birthday;

}

}

主要的解析和现实类:

import java.io.InputStream;

import java.util.ArrayList;

import java.util.List;

import org.xmlpull.v1.XmlPullParser;

import org.xmlpull.v1.XmlPullParserFactory;

import android.app.Activity;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.view.ViewGroup.LayoutParams;

import android.widget.LinearLayout;

import android.widget.TextView;

public class PullActivity extends Activity implements Runnable{

private TextView pullTextView ;

private LinearLayout layout;

private Handler handler=new Handler(){

public void handleMessage(android.os.Message msg) {

List<Student> lists=(List<Student>) msg.obj;

for(int i=0;i<lists.size();i++){

Student student=lists.get(i);

StringBuffer sb=new StringBuffer();

sb.append(student.getId()+"").append(student.getName()+"")

.append(student.getAge()+"").append(student.getSex()+" ").append(student.getBirthday()+"")

.append(student.getEmail()+"").append(student.getGroup()+"");

TextView txt=new TextView(getApplicationContext());

txt.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

txt.setText(sb.toString());

layout.addView(txt);

}

};

};

@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

setContentView(R.layout.pull);

pullTextView=(TextView) this.findViewById(R.id.pullTextView);

layout=(LinearLayout) this.findViewById(R.id.layout);

new Thread(this).start();

}

//pull解析xml

public List<Student> pullParseXml(){

List<Student> lists=null;

Student student=null;

try {

XmlPullParserFactory factory=XmlPullParserFactory.newInstance();

//获取XmlPullParser实例

XmlPullParser pullParser=factory.newPullParser();

InputStream in=this.getClass().getClassLoader().getResourceAsStream("student.xml");

pullParser.setInput(in, "UTF-8");

//开始

int eventType=pullParser.getEventType();

while(eventType!=XmlPullParser.END_DOCUMENT){

String nodeName=pullParser.getName();

switch (eventType) {

//文档开始

case XmlPullParser.START_DOCUMENT:

lists=new ArrayList<Student>();

break;

//开始节点

case XmlPullParser.START_TAG:

if("student".equals(nodeName)){

student=new Student();

student.setId(Integer.parseInt(pullParser.getAttributeValue(0)));

student.setGroup(Integer.parseInt(pullParser.getAttributeValue(1)));

}else if("name".equals(nodeName)){

student.setName(pullParser.nextText());

}else if("sex".equals(nodeName)){

student.setSex(pullParser.nextText());

}else if("age".equals(nodeName)){

student.setAge(Integer.parseInt(pullParser.nextText()));

}else if("email".equals(nodeName)){

student.setEmail(pullParser.nextText());

}else if("birthday".equals(nodeName)){

student.setBirthday(pullParser.nextText());

}else if("memo".equals(nodeName)){

student.setMemo(pullParser.nextText());

}

break;

//结束节点

case XmlPullParser.END_TAG:

if("student".equals(nodeName)){

lists.add(student);

student=null;

}

break;

default:

break;

}

// 手动的触发下一个事件

eventType=pullParser.next();

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return lists;

}

@Override

public void run() {

// TODO Auto-generated method stub

List<Student> lists=pullParseXml();

Message msg=handler.obtainMessage();

msg.obj=lists;

handler.sendMessage(msg);

}

}

注意xml中的<?xml version="1.0" encoding="utf-8"?>这句话要顶格显示,不要留空隙,附则错了很难调试的。

解析后效果:

赞助本站

人工智能实验室

相关热词: PULL 解析XML

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港