java xml pull解析_Android开发学习---使用XmlPullParser解析xml文件

本文将主要介绍pull解析器解析xml文件,环境为ubuntu 12.04+ intelij 13.1 + android sdk 2.1

一.创建一个XML项目,步骤如下:

671cba180e07caa461c1e65b57602877.png

db9dbb0528745dae4402a0c7ada44788.png

27f06d302329ea8a079ccc569fe18361.png

二.解析一个xml文件:

assets/person.xml

amos

30

tom

18

com/amos/xml/domain/Person.java

packagecom.amos.xml.domain;/*** Created by amosli on 14-6-3.*/

public classPerson {privateString name;privateInteger age;privateInteger id;publicInteger getAge() {returnage;

}public voidsetAge(Integer age) {if (age < 1 || age > 100) {this.age = 0;

}else{this.age =age;

}

}publicInteger getId() {returnid;

}public voidsetId(Integer id) {this.id =id;

}publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}

}

com/amos/xml/service/PersonService.java

packagecom.amos.xml.service;importandroid.content.Context;importandroid.content.res.AssetManager;importandroid.util.Log;importandroid.util.Xml;importcom.amos.xml.domain.Person;importorg.xmlpull.v1.XmlPullParser;importjava.io.InputStream;importjava.util.ArrayList;importjava.util.List;/*** Created by amosli on 14-6-3.*/

public classPersonService {privateContext context;publicPersonService(Context context) {this.context =context;

}/*** 把person.xml的输入流解析转化成list集合

*

*@param*@return

*/

public ListgetPersons(String filename) {

AssetManager manager=context.getAssets();//初始化项目.

List persons = null;

Person person= null;try{

InputStream inputStream=manager.open(filename);//在android下使用xmlpullparser进行解析

XmlPullParser xmlPullParser =Xml.newPullParser();//设置xmlpullparser的一些参数

xmlPullParser.setInput(inputStream, "utf-8");//获取pull解析器对应事件类型

int eventType =xmlPullParser.getEventType();while (eventType !=XmlPullParser.END_DOCUMENT) {switch(eventType) {caseXmlPullParser.START_DOCUMENT:

persons= new ArrayList();break;caseXmlPullParser.START_TAG:if (xmlPullParser.getName().equals("person")) {

person= newPerson();

String id= xmlPullParser.getAttributeValue(0);

Log.d("person.id", id);

person.setId(Integer.parseInt(id));

eventType=xmlPullParser.next();

}else if (xmlPullParser.getName().equals("name")) {

String name=xmlPullParser.nextText();

Log.d("person.name", name);

person.setName(name);

eventType=xmlPullParser.next();

}else if (xmlPullParser.getName().equals("age")) {

String age=xmlPullParser.nextText();

Log.d("person.age", age);

person.setAge(Integer.valueOf(age));

eventType=xmlPullParser.next();

}break;caseXmlPullParser.END_TAG:if (xmlPullParser.getName().equals("person")) {

persons.add(person);

person= null;

}break;

}

eventType=xmlPullParser.next();

}

}catch(Exception e) {

e.printStackTrace();

}returnpersons;

}

}

注:这里解析主要用到的是eventType(事件类型),如果是START_DOCUMENT则表示读到文档开始位置,如果是START_TAG,则表示读到文档中的元素开始位置,如,类似的结束位置为END_DOCUMENT和END_TAG;其中要注意判断其事件类型开始的名称是什么,并且取值时,注意其不同位置取值方式也不一样,如,那么取id的方式为getAttributeValue(int index),另外取amos,则要用nextText()方法进行取值.

/com/amos/xml/MyActivity.java

packagecom.amos.xml;importandroid.app.Activity;importandroid.os.Bundle;importandroid.widget.TextView;importandroid.widget.Toast;importcom.amos.xml.domain.Person;importcom.amos.xml.service.PersonService;importjava.util.List;public class MyActivity extendsActivity {/*** Called when the activity is first created.*/@Overridepublic voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);

setContentView(R.layout.main);

TextView show_users=(TextView) findViewById(R.id.show_users);

PersonService personService= new PersonService(this);

StringBuilder stringBuilder= newStringBuilder();

List persons = personService.getPersons("person.xml");for(Person person : persons) {

stringBuilder.append(" " + person.getName()).append(":").append(person.getAge());

}

System.out.println("stringBuilder:" +stringBuilder);

show_users.setText(stringBuilder);

Toast.makeText(this, "数据写入成功!" +stringBuilder, Toast.LENGTH_LONG);

}

}

这里我在主界面定义了一个TextView,用来显示读取到的xml文件的内容,效果如下图所示:

f73346dd503436aac7d016bc0d2e284c.png

3.测试用例

首先,加入必要的配置:AndroidManifest.xml

其中加粗的部分是后加入到项目中的.

其次,写一个testcase:/com/amos/xml/test/TestService.java

package com.amos.xml.test;

import android.test.AndroidTestCase;

import com.amos.xml.domain.Person;

import com.amos.xml.service.PersonService;

import java.util.List;

/**

* Created by amosli on 14-6-3.

*/

public class TestService extends AndroidTestCase {

public void testGetPersons() throws Exception {

PersonService personService = new PersonService(getContext());

Listpersons = personService.getPersons("person.xml");

for (Person person : persons) {

System.out.println(person.getName());

}

}

}

这里想要查看每一步的运行步骤,可以加上断点,intelij 中的快捷键是F8(step over),F7(step into),F9(Resume program).

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值