android解析和生成XML文件有三种方法
1、Simple API for XML(SAX)
2、Document Object(DOM)
3、Android附带的pull解析器 (推荐使用)
这里使用pull解析器
保存XML文件
List<Person> list = new ArrayList<Person>();
list.add(new Person(1,"张三",11));
list.add(new Person(2,"李四",22));
File xmlFile = new File(getContext().getFilesDir(), "test.xml");//文件保存到/data/data/<package name>/files目录
FileOutputStream out = new FileOutputStream(xmlFile);
XmlSerializer serializer = Xml.newSerializer();
serializer.setOutput(out, "UTF-8");
serializer.startDocument("UTF-8", true);//开始文档
serializer.startTag(null, "persons");
for(Person person: list){
serializer.startTag(null, "person");
serializer.attribute(null, "id", person.getId().toString());
serializer.startTag(null, "name");
serializer.text(person.getName());
serializer.endTag(null, "name");
serializer.startTag(null, "age");
serializer.text(person.getAge().toString());
serializer.endTag(null, "age");
serializer.endTag(null, "person");
}
serializer.endTag(null, "persons");
serializer.endDocument();//结束文档
out.flush();
out.close();
保存的数据test.xml
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<persons>
<person id="1" >
<name>张三</name>
<age>11</age>
</person>
<person id="2" >
<name>李四</name>
<age>22</age>
</person>
</persons>
读取
//用这种方法获取输入流需要把test.xml文件放到项目src根目录下
InputStream xml = this.getClass().getClassLoader().getResourceAsStream("test.xml");
List<Person> list = null;
//获取pull解析器
//XmlPullParser pullParser = XmlPullParserFactory.newInstance().newPullParser();//方法一
XmlPullParser pullParser = Xml.newPullParser();//方法二
pullParser.setInput(xml, "UTF-8");//为Pull解析器设置要解析的xml数据
int event = pullParser.getEventType();
Person person=null;
while (event != XmlPullParser.END_DOCUMENT) {
switch (event) {
case XmlPullParser.START_DOCUMENT:
list = new ArrayList<Person>();
break;
case XmlPullParser.START_TAG:
if("person".equals(pullParser.getName())){
person = new Person();
int id = Integer.valueOf(pullParser.getAttributeValue(0));
person.setId(id);
}else if("name".equals(pullParser.getName())){
String name = pullParser.nextText();
person.setName(name);
}else if("age".equals(pullParser.getName())){
int age = Integer.valueOf(pullParser.nextText());
person.setAge(age);
}
break;
case XmlPullParser.END_TAG:
if("person".equals(pullParser.getName()) && person!=null){
list.add(person);
person = null;
}
break;
}
event = pullParser.next();//进入下一节点
}
Person.java
public class Person {
private Integer id;
private String name;
private Integer age;
public Person() {
super();
}
public Person(Integer id, String name, Integer age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}