Android开发:PULL方式解析XML
Android中解析XML的方式有三种,DOM方式是将全部文件解析到内存中,再进行操作,对于手机来说太耗内存了;SAX和PULL都采用事件驱动的方式,边读边解析。在看过几种之后觉得PULL比较好记。以下是摘录的代码:
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.io.Writer;
- import java.util.ArrayList;
- import java.util.List;
-
-
- import org.xmlpull.v1.XmlPullParser;
- import org.xmlpull.v1.XmlSerializer;
-
-
- import android.util.Xml;
-
-
- import cn.itcast.domain.Person;
-
-
-
- public class PULLPersonService {
-
- public static void save(List<Person> persons, Writer writer) throws Throwable{
- 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", 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();
- writer.flush();
- writer.close();
- }
-
-
- public static List<Person> getPersons(InputStream inStream) throws Throwable{
- List<Person> persons = null;
- Person person = null;
- XmlPullParser parser = Xml.newPullParser();
- parser.setInput(inStream, "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());
- }
- 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;
- }
- eventType = parser.next();
- }
- return persons;
- }
- }
评论暂时关闭