新建android项目
编写androidmanifest.xml,使本android项目具有单元测试功能和写外设的权限。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.itheima28.xmldemo"
android:versioncode="1"
android:versionname="1.0" >
<uses-sdk
android:minsdkversion="8"
android:targetsdkversion="19" />
<!—用于单元测试—>
<instrumentation
android:name="android.test.instrumentationtestrunner"
android:targetpackage="com.itheima28.xmldemo">
</instrumentation>
<!—写外设的权限à
<uses-permission android:name="android.permission.write_external_storage"/>
<application
android:allowbackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/apptheme" >
<!—单元测试所需à
<uses-library android:name="android.test.runner"/>
<activity
android:name="com.itheima28.xmldemo.mainactivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.main" />
<category android:name="android.intent.category.launcher" />
</intent-filter>
</activity>
</application>
</manifest>
3 person对象
package com.itheima28.xmldemo;
public class person {
private int id;
private string name;
private int age;
@override
public string tostring() {
return "person [id=" + id + ", name=" + name + ", age=" + age + "]";
}
public person() {
super();
public person(int id, string name, int age) {
this.id = id;
this.name = name;
this.age = age;
public int getid() {
return id;
public void setid(int id) {
public string getname() {
return name;
public void setname(string name) {
public int getage() {
return age;
public void setage(int age) {
}
4 写xml文件和读xml文件的代码
package com.itheima28.xmldemo.test;
import java.io.file;
import java.io.fileinputstream;
import java.io.fileoutputstream;
import java.util.arraylist;
import java.util.list;
import org.xmlpull.v1.xmlpullparser;
import org.xmlpull.v1.xmlserializer;
import android.os.environment;
import android.test.androidtestcase;
import android.util.log;
import android.util.xml;
import com.itheima28.xmldemo.person;
public class testcase extends androidtestcase {
/**
* 测试写xml文件
*/
public void testwritexml() {
writexmltolocal();
}
* 测试读xml文件
public void testreadxml() {
list<person> personlist = parsexmlfromlocal();
for (person person : personlist) {
log.i("testcase",person.tostring());
}
* 写xml文件到本地
private void writexmltolocal() {
list<person> personlist = getpersonlist();
//获得序列化对象
xmlserializer serializer = xml.newserializer();
try {
//测试获得到的位置是:/storage/emulated/0
file path = new file(environment.getexternalstoragedirectory(),"persons.xml");
fileoutputstream fos = new fileoutputstream(path);
//指定序列化对象输出的位置和编码
serializer.setoutput(fos,"utf-8");
//写开始<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
serializer.startdocument("utf-8", true);
//<persons>
serializer.starttag(null, "persons");
for (person person : personlist) {
//开始写入
serializer.starttag(null, "person");
serializer.attribute(null, "id", string.valueof(person.getid()));
//写名字<name>
serializer.starttag(null, "name");
serializer.text(person.getname());
//</name>
serializer.endtag(null, "name");
//写年龄
//<age>
serializer.starttag(null, "age");
serializer.text(string.valueof(person.getage()));
//</age>
serializer.endtag(null, "age");
//</persons>
serializer.endtag(null, "person");
}
//</persons>
serializer.endtag(null, "persons");
//结束
serializer.enddocument();
} catch (exception e) {
e.printstacktrace();
* 用于生成一个list的person集合
* @return
private list<person> getpersonlist() {
list<person> personlist = new arraylist<person>();
for (int i = 0; i < 30; i++) {
personlist.add(new person(i,"wang" + i, 18 + i));
return personlist;
* 解析xml文件并将xml文件中内容写list集合中
private list<person> parsexmlfromlocal() {
file path = new file(environment.getexternalstoragedirectory(),"persons.xml");
fileinputstream fis = new fileinputstream(path);
//获得pull解析器对象
xmlpullparser parser = xml.newpullparser();
//指定解析的文件的编码格式
parser.setinput(fis,"utf-8");
//获得时间类型
int eventtype = parser.geteventtype();
list<person> personlist = null;
person person = null;
string id;
while (eventtype != xmlpullparser.end_document) {
//获取当前节点的名称
string tagname = parser.getname();
switch (eventtype) {
//获得当前节点的名称 <person>
case xmlpullparser.start_tag:
//<persons>
if("persons".equals(tagname)) {
personlist = new arraylist<person>();
} else if ("person".equals(tagname)) { //<person id="1">
person = new person();
id = parser.getattributevalue(null,"id");
person.setid(integer.valueof(id));
} else if("name".equals(tagname)) {
person.setname(parser.nexttext());
} else if("age".equals(tagname)) { //<age>
person.setage(integer.parseint(parser.nexttext()));
}
break;
//</persons>
case xmlpullparser.end_tag:
if ("person".equals(tagname)) {
//需要把上面设置好的person对象添加到集合中
personlist.add(person);
default:
}
//获得下一个事件类型
eventtype = parser.next();
}
return personlist;
return null;
5 设置log过滤器
6、控制台输出结果