1、创建一个实体类,人的属性getter and setter方法
2、在一个list列表中添加30个人的信息
第一种解析是序列化XmlSerializer直接写xml文件到本地
/**
* XmlSerializer写xml文件到本地
* 获得序列化对象
* 读取到xml的开始 startDocument
* 读取到xml的结束 endDocument
* 读取到xml的开始标签返回 startTag
* 读取到xml的结束标签返回 endTag
*/
第二种解析是pull解析器对象
/**
* 获得pull解析器对象
* 读取到xml的结束返回 END_DOCUMENT
* 读取到xml的开始标签返回 START_TAG
* 读取到xml的结束标签返回 END_TAG
* @return
*/
person实体类
package com.zhansy.xmldemo;
/**
* Created by ZHANSY on 2015/8/14.
*/
public class Person {
//个人信息,ID 姓名 年龄
private int id;
private String name;
private int age;
public Person(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public Person() {
}
public int getId() {
return id;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
public void setId(int 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;
}
}
package com.zhansy.xmldemo;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Xml;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlSerializer;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
/**
* XmlSerializer写xml文件到本地
* 获得序列化对象
* 读取到xml的开始 startDocument
* 读取到xml的结束 endDocument
* 读取到xml的开始标签返回 startTag
* 读取到xml的结束标签返回 endTag
*/
private void writeXmlToLocal() {
//获得有多少个人的列表
List<Person> personList = getPersonList();
// 获得序列化对象
XmlSerializer serializer = Xml.newSerializer();
try {
//获得内存卡的路径,创建persons.xml文件
File path = new File(Environment.getExternalStorageDirectory(), "persons.xml");
FileOutputStream fos = new FileOutputStream(path);
// 指定序列化对象输出的位置和编码
serializer.setOutput(fos, "utf-8");
//开始文档,起始(编码,是否独立),后面也要结束文档,相呼应
serializer.startDocument("utf-8", true); // 写开始 <?xml version='1.0' encoding='utf-8' standalone='yes' ?>
//开始Tag标签
serializer.startTag(null, "persons"); // <persons>
for (Person person : personList) {
// 开始写人
serializer.startTag(null, "Person"); // <Person>
//写人的属性
serializer.attribute(null, "id", String.valueOf(person.getId()));
// 写名字
serializer.startTag(null, "name"); // <name>
serializer.text(person.getName());
serializer.endTag(null, "name"); // </name>
// 写年龄
serializer.startTag(null, "age"); // <age>
serializer.text(String.valueOf(person.getAge()));
serializer.endTag(null, "age"); // </age>
serializer.endTag(null, "Person"); // </Person>
}
serializer.endTag(null, "persons"); // </persons>
serializer.endDocument(); // 结束
} catch (Exception e) {
e.printStackTrace();
}
}
/**
*
* 添加多个人,放在List中
* @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;
}
/**
* 获得pull解析器对象
* 读取到xml的结束返回 END_DOCUMENT
* 读取到xml的开始标签返回 START_TAG
* 读取到xml的结束标签返回 END_TAG
* @return
*/
private List<Person> parserXmlFromLocal() {
try {
//同样需要找到他的路径
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) {
case XmlPullParser.START_TAG: // 当前等于开始节点 <Person>
if ("persons".equals(tagName)) { // <persons>
personList = new ArrayList<Person>();
} else if ("Person".equals(tagName)) { // <Person id="1">
person = new Person();
//设置id属性
id = parser.getAttributeValue(null, "id");
//设置person的id的值
person.setId(Integer.valueOf(id));
} else if ("name".equals(tagName)) { // <name>
person.setName(parser.nextText());//nextText获得文本内容
} else if ("age".equals(tagName)) { // <age>
person.setAge(Integer.parseInt(parser.nextText()));
}
break;
case XmlPullParser.END_TAG: // </persons>
if ("Person".equals(tagName)) {
// 需要把上面设置好值的person对象添加到集合中
personList.add(person);
}
break;
default:
break;
}
eventType = parser.next(); // 获得下一个事件类型
}
return personList;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}