1 import java.io.FileInputStream;  2 import java.io.FileOutputStream;  3 import java.util.ArrayList;  4 import java.util.List;  5   6 import org.xmlpull.v1.XmlPullParser;  7 import org.xmlpull.v1.XmlSerializer;  8   9 import android.util.Log; 10 import android.util.Xml; 11  12 import com.itheima27.xmlparserserializer.entities.Person; 13  14 public class XmlUtils { 15  16     private static final String TAG = "XmlUtils"; 17  18     /** 19      * 把数据以xml形式写到本地 20      */ 21     public void writeToLocal() throws Exception { 22      23         List<Person> personList = new ArrayList<Person>(); 24         for (int i = 0; i < 30; i++) { 25             personList.add(new Person(i, "王" + i, 20 + i)); 26         } 27          28         XmlSerializer serializer = Xml.newSerializer();        // 创建Xmlserializer的对象 29         // 指定序列化对象输出的流 30         FileOutputStream fos = new FileOutputStream("/mnt/sdcard/person.xml"); 31         serializer.setOutput(fos, "utf-8"); 32          33         serializer.startDocument("utf-8", true);    // 写xml头 34          35         serializer.startTag(null, "persons");    // 开始的根节点 36          37         for (Person person : personList) { 38             serializer.startTag(null, "person"); 39             serializer.attribute(null, "id", String.valueOf(person.getId())); 40              41             // 写人的姓名 42             serializer.startTag(null, "name"); 43             serializer.text(person.getName()); 44             serializer.endTag(null, "name"); 45              46             // 写人的年龄 47             serializer.startTag(null, "age"); 48             serializer.text(String.valueOf(person.getAge())); 49             serializer.endTag(null, "age"); 50              51             serializer.endTag(null, "person"); 52         } 53          54         serializer.endTag(null, "persons");        // 结束的根节点 55          56         serializer.endDocument();    // 标记xml输出完毕 57     } 58      59     /** 60      * 从本地文件解析xml数据 61      */ 62     public void parserXmlFromLocal() throws Exception { 63         // 创建Pull解析器对象 64         XmlPullParser parser = Xml.newPullParser(); 65         // 指定解析的文件 66         FileInputStream fis = new FileInputStream("/mnt/sdcard/person.xml"); 67         parser.setInput(fis, "UTF-8"); 68          69         int eventType = parser.getEventType();        // 获得解析器的第一个事件类型  70          71         List<Person> personList = null; 72         Person person = null; 73         String name; 74          75         while(eventType != XmlPullParser.END_DOCUMENT) {        // 如果事件类型不等于结束的类型, 继续循环 76             String tagName = parser.getName();        // 获得当前节点的名称 77  78             // 解析数据 79             switch (eventType) { 80             case XmlPullParser.START_TAG:        // 代表开始节点 <persons> 81                  82                 if("persons".equals(tagName)) { 83                     // 初始化集合 84                     personList = new ArrayList<Person>(); 85                 } else if("person".equals(tagName)) { 86                     person = new Person(); 87                     person.setId(Integer.valueOf(parser.getAttributeValue(null, "id"))); 88                 } else if("name".equals(tagName)) { 89                     name = parser.nextText();        // 当前是<name> 节点 nextText是取<name> 后边的值 90                     person.setName(name); 91                 } else if("age".equals(tagName)) { 92                     person.setAge(Integer.parseInt(parser.nextText())); 93                 } 94                 break; 95             case XmlPullParser.END_TAG:        // 代表结束节点 </person> 96                 if("person".equals(tagName)) {        // 当前是</person> 97                     // 把上面person的对象添加到集合中 98                     personList.add(person); 99                 }100                 break;101             default:102                 break;103             }104             105             eventType = parser.next();        // 赋值下一个事件类型106         }107         108         109         if(personList != null) {110             for (Person p : personList) {111                 Log.i(TAG, p.toString());112             }113         }114     }115 }

更多相关文章

  1. Android之Spinner解析
  2. 转:android 实现 流媒体 播放远程mp3文件 代码
  3. Android(安卓)Gson 解析泛型报错
  4. Android中使用SAX解析XML
  5. android【打电话,收发短信实现】
  6. Android之TabHost的几种使用方法
  7. Android——HashMap的替代方案
  8. Android(安卓)-- 文字设置超链接
  9. Android(安卓)Bundle类

随机推荐

  1. android 自定义对话框
  2. Android(安卓)SDK Manager无法更新解决方
  3. 几个android实用网站
  4. Android(安卓)ListView滑动加载
  5. android简单的天气预报例子和XML解析
  6. Android: Android(安卓)Touch事件处理
  7. Android入门篇一:Android(安卓)Activity生
  8. 转载 《Android程序运行过程,Android》
  9. android基础(开发环境搭建)
  10. android源码添加service