使用SAX或者DOM或者pull解析XML文件
在Android平台上可以使用Simple API for XML(SAX)、Document Object Model(DOM)
除了可以使用SAX或DOM解析XML文件之外,大家也可以使用Android内置的pull解析器XML文件,Pull解析器是一个开源的Java项目,即可以用于Android
android集成了pull解析器
XML节点
根节点 Node Type
Element Node
Text Node
首页我们创建一个Person类,里面有age,name的属性和字段
//以下为解析XML
public List<Person> getPersons(InputStrea xml) throws Exception{
List<Person> persons=null;
Person person = null;
XmlPullParser pullParser = Xml.newPullParser();
//为pull解析器设置要解析的XML数据
pullParser.setInput(xml,"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())){
int id = new Integer(pullParser.getAttributeValue(0));
person = new Person();
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内容
private static final String TAG = "PersonServiceTest";
public void testPersons() throws Exception{
InputStream xml = this.getClass().getClassLoader().getResourceAsStream("person.xml");
List<Person> persons = PersonService.getPersons(xml);
for(Person person : persons)
{
Log.i(TAG,person.toString());
}
}
使用pull解析器,向xml插入数据
public static void save(List<Person> persons ,OutputStream out) throws Exception{
XmlSerializer serializer = Xml.newSerializer();
serializer.setOutput(out,"UTF-8");
serializer.startDocument("UTF-8",true); //开始文档
serializer.starTag(null,"persons"); //根节点
for(Person person : persons)
{
serializer.startTag(null,"person");
serializer.attribute(null,"id",person.getId().toString());
serializer.startTag(null,"name");
serializer.text(person.getName().toString());
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();
}
单元测试
public void testSave() throws Exception{
List<Person> persons = new ArrayList<Person>();
persons.add(new Person(43,"zhangxx",80));
persons.add(new Person(12,"lili",20));
persons.add(new Person(78,"xiaoxiao",8));
File xmlFile = new File(getContext().getFilesDir(),"itcast.xml");
FileOutputStream outStream = new FileOutputStream(xmlFile);
PersonService.save(persons,outStream);
}