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 MVVM ItemViewSelector 实现列表中不同的view类型
  2. Android 判断手机的Rom类型
  3. IntentService通过HandlerThread单独开启一个线程来处理所有Inte
  4. Android上下文对象Context
  5. Android 访问Webservice接口,参数对象不能串行化问题解决(java.lan
  6. Activity之间传递对象
  7. 简单的通过request判断客户端设备类型
  8. Android Get Network Type获得网络类型
  9. js判断手机系统类型

随机推荐

  1. Android与ios区别
  2. Android(安卓)Studio 小技巧合集
  3. Linux下的Android电话管理软件――QtADB(
  4. android 系统重启关机流程分析
  5. 2011.08.12(5)——— android AudioTrack A
  6. Android WebView与服务端交互Demo
  7. 转:android实现发送短信并保存到数据库,同
  8. android如何调用dotnet编写的webservice
  9. android选项卡
  10. gradle使用技巧之全局变量