xml有多种解析的方式,这篇文章只介绍用pull解析器来解析XML文件,接下来我会说明使用Pull解析器来读取Xml文件内容和新建Xml文件。
<?xml version="1.0" encoding = "utf-8"?>
<persons>
<person id = "23">
<name>Jack</name>
<age>18</age>
</person>
<person id = "20">
<name>Tom</name>
<age>21</age>
</person>
</persons>为了方便操作,我新建了一个Person类:public class Person {
private int id;
private String name;
private int 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 int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
}
public Person(int id, String name, int age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
public Person() {
}
}public class PersonService {
/**
* 获取Xml文件的内容
* @param p_InputStream Xml文件输入流
* @return 包含Person信息的列表
* @throws Exception
*/
public static List<Person> getPersons(InputStream p_InputStream) throws Exception{
List<Person> persons = null;
Person person = null;
//得到XmlPullParse对象
XmlPullParser pullParser = Xml.newPullParser();
pullParser.setInput(p_InputStream, "utf-8");
int event = pullParser.getEventType();
while(event != XmlPullParser.END_DOCUMENT){
switch (event) {
case XmlPullParser.START_DOCUMENT:
persons = new ArrayList<Person>();
break;
case XmlPullParser.START_TAG:
if("person".equals(pullParser.getName())){
person = new Person();
int id = new Integer(pullParser.getAttributeValue(0));
person.setId(id);
}
if("name".equals(pullParser.getName())){
String name = pullParser.nextText();
person.setName(name);
}
if("age".equals(pullParser.getName())){
int age = new Integer(pullParser.nextText());
person.setAge(age);
}
break;
case XmlPullParser.END_TAG :
if("person".equals(pullParser.getName())){
persons.add(person);
person = null;
}
break;
}
event = pullParser.next();
}
return persons;
}
/**
* 保存数据到XML文件中
* @param p_Person 数据列表
* @param p_Out 输出流
* @throws Exception 抛出异常
*/
public static void save(List<Person> p_Person,OutputStream p_Out) throws Exception{
XmlSerializer serializer = Xml.newSerializer();
serializer.setOutput(p_Out, "utf-8");
serializer.startDocument("utf-8", true);
serializer.startTag(null, "persons");
for(Person person:p_Person){
serializer.startTag(null, "person");
serializer.attribute(null, "id", person.getId()+"");
serializer.startTag(null, "name");
serializer.text(person.getName());
serializer.endTag(null, "name");
serializer.startTag(null, "age");
serializer.text(person.getAge()+"");
serializer.endTag(null, "age");
serializer.endTag(null, "person");
}
serializer.endTag(null, "persons");
serializer.endDocument();
p_Out.flush();
p_Out.close();
}
}下面是我MainActivity中的代码:
public class MainActivity extends Activity {
private TextView text;
StringBuilder sb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text = (TextView) findViewById(R.id.text);
sb = new StringBuilder();
sb.append("源文件的内容\n");
InputStream xml = getClass().getClassLoader().getResourceAsStream("data.xml");
try {
List<Person> persons = PersonService.getPersons(xml);
for(Person person:persons)
sb.append(person.toString()).append("\n");
text.setText(sb);
} catch (Exception e) {}
sb.append("新建的文件的内容\n");
List<Person> p = new ArrayList<Person>();
p.add(new Person(13, "lili", 18));
p.add(new Person(23, "liufi", 45));
File xmlFile = new File(getApplicationContext().getFilesDir(),"person.xml");
try {
OutputStream outputStream = new FileOutputStream(xmlFile);
PersonService.save(p, outputStream);
} catch (Exception e) {}
try {
xml = new FileInputStream(getApplicationContext().getFilesDir()+"/person.xml");
List<Person> persons = PersonService.getPersons(xml);
for(int i=0;i<persons.size();i++)
sb.append(persons.get(i).toString()).append("\n");
text.setText(sb);
} catch (Exception e1) {}
}
}
写的内容不多,代码倒是挺多的,因为内容比较基础,所以看看代码就可以明白解析的方式,多用用就可以很快的掌握了Pull解析器了。原文地址:http://blog.csdn.net/programchangesworld/article/details/45422577