使用Pull解析器读取XML文件

  1 package com.gnnuit.service;
  2 
  3 import java.io.File;
  4 import java.io.FileOutputStream;
  5 import java.io.InputStream;
  6 import java.util.ArrayList;
  7 import java.util.List;
  8 
  9 import org.xmlpull.v1.XmlPullParser;
 10 import org.xmlpull.v1.XmlSerializer;
 11 
 12 import com.gnnuit.domain.Person;
 13 
 14 import android.content.Context;
 15 import android.content.res.AssetManager;
 16 import android.os.Environment;
 17 import android.util.Xml;
 18 import android.widget.Toast;
 19 
 20 /**
 21  * 使用Android的Pull解析器对XML文件进行解析
 22  * 
 23  * @author 杨伦义
 24  * 
 25  */
 26 public class XmlService {
 27     private Context context;
 28 
 29     public XmlService(Context context) {
 30         this.context = context;
 31     }
 32 
 33     /**
 34      * 使用Android的Pull解析器读取XML文件
 35      * 
 36      * @param fileName要解析的XML文件名
 37      * @return JavaBean的List集合
 38      */
 39     public List<Person> readXml(String fileName) {
 40         // 获得Asset文件
 41         AssetManager manager = context.getAssets();
 42         Person person = null;
 43         List<Person> list = new ArrayList<Person>();
 44         try {
 45             InputStream is = manager.open(fileName);
 46             // =====================================================================
 47             // 使用Android的pull解析器解析XML文档
 48             // 得到pull解析器的实例
 49             XmlPullParser parser = Xml.newPullParser();
 50             // 设置解析器参数
 51             parser.setInput(is, "UTF-8");
 52             // 得到解析器的事件类型
 53             int type = parser.getEventType();
 54             while (type != XmlPullParser.END_DOCUMENT) {
 55                 if (type == XmlPullParser.START_TAG) {
 56                     if ("person".equals(parser.getName())) {
 57                         person = new Person();
 58                         int id = Integer.parseInt(parser.getAttributeValue(0));
 59                         person.setId(id);
 60                     } else if ("name".equals(parser.getName())) {
 61                         String name = parser.nextText();
 62                         person.setName(name);
 63                     } else if ("age".equals(parser.getName())) {
 64                         int age = Integer.parseInt(parser.nextText());
 65                         person.setAge(age);
 66                     }
 67                 }
 68                 if (type == XmlPullParser.END_TAG) {
 69                     if ("person".equals(parser.getName())) {
 70                         list.add(person);
 71                     }
 72                 }
 73                 type = parser.next();
 74             }
 75             return list;
 76         } catch (Exception e) {
 77             e.printStackTrace();
 78             Toast.makeText(context, "文件打开失败", Toast.LENGTH_SHORT).show();
 79         }
 80         return null;
 81     }
 82 
 83     /**
 84      * 使用Android的Pull解析器保存XML文件
 85      * 
 86      * @param persons要保存的List对象
 87      * @return 是否保存成功
 88      */
 89     public boolean writeXml(List<Person> persons) {
 90         try {
 91             // 获得XML序列化器
 92             XmlSerializer serializer = Xml.newSerializer();
 93             File file = new File(Environment.getExternalStorageDirectory(),
 94                     "person.xml");
 95             FileOutputStream fos = new FileOutputStream(file);
 96             serializer.setOutput(fos, "utf-8");
 97             serializer.startDocument("utf-8", true);
 98             serializer.startTag(null, "persons");
 99             for (Person p : persons) {
100                 serializer.startTag(null, "person");
101                 serializer.attribute(null, "id", p.getId() + "");
102 
103                 serializer.startTag(null, "name");
104                 serializer.text(p.getName());
105                 serializer.endTag(null, "name");
106 
107                 serializer.startTag(null, "age");
108                 serializer.text(p.getAge() + "");
109                 serializer.endTag(null, "age");
110 
111                 serializer.endTag(null, "person");
112             }
113             serializer.endTag(null, "persons");
114             serializer.endDocument();
115             fos.close();
116             return true;
117         } catch (Exception e) {
118             e.printStackTrace();
119             return false;
120         }
121     }
122 }

 

posted @ 2013-11-30 14:16  yly123  阅读(304)  评论(0编辑  收藏  举报