您的位置:首页 > 移动开发 > Android开发

Android使用Pull解析和生成XML文件

2014-09-18 21:53 531 查看


Android使用Pull解析和生成XML文件

除了可以使用SAX和DOM解析XML文件之外,还可以使用Android内置的pull解析器解析xml文件。采用事件驱动,返回相应的数值代码。


一、首先是Pull解析xml文件


1. 以解析该xml文件为例:

<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id="23">
<name>大明</name>
<age>30</age>
</person>
<person id="20">
<name>小明</name>
<age>25</age>
</person>
</persons>


2.新建JavaBean,用于存放xml文件中的person数据:

public class Person {

private int id;
private String name;
private short age;

public Person() {
super();
}
public Person(int id, String name, short age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public short getAge() {
return age;
}
public void setAge(short age) {
this.age = age;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
}

}


3.新建业务操作类:

public class PULLPersonService {

public static List<Person> getPersons(InputStream inputStream) throws Exception {
List<Person> persons = null;
Person person = null;
XmlPullParser parser = Xml.newPullParser();
parser.setInput(inputStream, "UTF-8");
int eventType = parser.getEventType(); //返回第一个事件数值代码

while(eventType != XmlPullParser.END_DOCUMENT) {
switch(eventType) {
case XmlPullParser.START_DOCUMENT:
persons = new ArrayList<Person>();
break;
case XmlPullParser.START_TAG:
String name = parser.getName();
if("person".equals(name)) {
person = new Person();
person.setId(new Integer(parser.getAttributeValue(0)));
}
if(person != null) {
if("name".equals(name)) {
person.setName(parser.nextText());
} else if("age".equals(name)) {
person.setAge(new Short(parser.nextText()));
}
}
break;
case XmlPullParser.END_TAG:
if("person".equals(parser.getName())) {
persons.add(person);
person = null;
}
break;
default:
break;
}
eventType = parser.next();
}
return persons;
}

}


4.新建单元测试类:

public class PersonServiceTest extends AndroidTestCase {

public void testPULLGetPersons() throws Exception {
InputStream inputStream = getClass().getClassLoader().getResourceAsStream("test.xml");
List<Person> persons = PULLPersonService.getPersons(inputStream);
for(Person person : persons) {
Log.i("PULL", person.toString());
}
}

}


二、其次是Pull生成xml文件


1. 使用OutputStream生成xml文件:

public static void save(List<Person> persons, OutputStream outputStream) throws Exception {
XmlSerializer serializer = Xml.newSerializer();
serializer.setOutput(outputStream, "UTF-8");
serializer.startDocument("UTF-8", true);
serializer.startTag(null, "persons");
for(Person person : persons) {
serializer.startTag(null, "person");
serializer.attribute(null, "id", String.valueOf(person.getId()));
serializer.startTag(null, "name");
serializer.text(person.getName());
serializer.endTag(null, "name");
serializer.startTag(null, "age");
serializer.text(String.valueOf(person.getAge()));
serializer.endTag(null, "age");
serializer.endTag(null, "person");
}
serializer.endTag(null, "persons");
serializer.endDocument();
outputStream.flush();
outputStream.close();
}


2.新建单元测试方法:

public void testSave() throws Exception {
List<Person> persons = new ArrayList<Person>();
persons.add(new Person(001, "haha", (short)12));
persons.add(new Person(002, "你好", (short)23));
persons.add(new Person(003, "欧巴", (short)34));
File file = new File(this.getContext().getFilesDir(), "person.xml");
FileOutputStream outputStream = new FileOutputStream(file);
PULLPersonService.save(persons, outputStream);
}


3. 使用Writer生成xml文件:

public static void save(List<Person> persons, Writer writer) throws Exception {
XmlSerializer serializer = Xml.newSerializer();
serializer.setOutput(writer);
serializer.startDocument("UTF-8", true);
serializer.startTag(null, "persons");
for(Person person : persons) {
serializer.startTag(null, "person");
serializer.attribute(null, "id", String.valueOf(person.getId()));
serializer.startTag(null, "name");
serializer.text(person.getName());
serializer.endTag(null, "name");
serializer.startTag(null, "age");
serializer.text(String.valueOf(person.getAge()));
serializer.endTag(null, "age");
serializer.endTag(null, "person");
}
serializer.endTag(null, "persons");
serializer.endDocument();
writer.flush();
writer.close();
}


4.新建单元测试方法:

public void testSave() throws Exception {
List<Person> persons = new ArrayList<Person>();
persons.add(new Person(001, "haha", (short)12));
persons.add(new Person(002, "你好", (short)23));
persons.add(new Person(003, "欧巴", (short)34));
File file = new File(this.getContext().getFilesDir(), "ppp.xml");
FileOutputStream outputStream = new FileOutputStream(file);
OutputStreamWriter writer = new OutputStreamWriter(outputStream, "UTF-8");
BufferedWriter bwriter = new BufferedWriter(writer);//缓存
PULLPersonService.save(persons, bwriter);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: