1 package com.example.xmldemo.test; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileNotFoundException; 6 import java.io.FileOutputStream; 7 import java.io.IOException; 8 import java.io.InputStreamReader; 9 import java.util.ArrayList; 10 import java.util.List; 11 12 import org.xmlpull.v1.XmlPullParser; 13 import org.xmlpull.v1.XmlSerializer; 14 15 import com.example.xmldemo.Person; 16 17 import android.os.Environment; 18 import android.test.AndroidTestCase; 19 import android.util.Log; 20 import android.util.Xml; 21 22 public class XmlTest extends AndroidTestCase 23 { 24 public void test() 25 { 26 writeLocal(); 27 28 List<Person> personList = parseXml(); 29 for(Person person : personList) 30 { 31 Log.i("XmlTest", person.toString()); 32 } 33 } 34 /** 35 * 写xml文件大本地 36 */ 37 public void writeLocal() 38 { 39 List<Person> personList = getPersonList(); 40 //获得序列化对象 41 XmlSerializer serializer = Xml.newSerializer(); 42 // 43 try 44 { 45 //创建文件流对象 46 File file = new File("data/data/com.example.xmldemo", "persons.xml"); 47 FileOutputStream fos = new FileOutputStream(file); 48 //设置文件的输出流 49 serializer.setOutput(fos, "UTF-8"); 50 serializer.startDocument("utf-8", true); //<?xml version 51 serializer.startTag(null, "persons"); //<persons> 52 for(Person person : personList) 53 { 54 serializer.startTag(null, "person"); //<person> 55 serializer.attribute(null, "id", String.valueOf(person.getId())); 56 serializer.startTag(null, "name"); //<name> 57 serializer.text(person.getName()); // kite1 58 serializer.endTag(null, "name"); //</name> 59 serializer.startTag(null, "age"); //<age> 60 serializer.text(String.valueOf(person.getAge())); 61 serializer.endTag(null, "age");//</age> 62 serializer.endTag(null, "person"); //<person> 63 } 64 serializer.endTag(null, "persons"); //</persons> 65 serializer.endDocument(); 66 serializer.flush(); 67 fos.flush(); 68 fos.close(); 69 } catch (Exception e) 70 { 71 e.printStackTrace(); 72 } 73 74 } 75 /** 76 * 获得personList 77 * @return 78 */ 79 public List<Person> getPersonList() 80 { 81 List<Person> personList = new ArrayList<Person>(); 82 for(int i = 0; i < 30; i++) 83 { 84 Person person = new Person(i, "kite" + 1,18 + i); 85 personList.add(person); 86 } 87 return personList; 88 } 89 90 public List<Person> parseXml() 91 { 92 93 try 94 { 95 //创建文件流对象 96 File file = new File("data/data/com.example.xmldemo", "persons.xml"); 97 FileInputStream fis = new FileInputStream(file); 98 //获得pull 解析对象 99 XmlPullParser parser = Xml.newPullParser(); 100 // 指定解析的文件和编码格式 101 parser.setInput(fis,"utf-8"); 102 int eventType = parser.getEventType(); //获得事件的类型 103 104 //初始化集合 105 List<Person> personList = null; 106 Person person = null; 107 //如果不是最后的endDocument 108 while(eventType != XmlPullParser.END_DOCUMENT) 109 { 110 String tagName = parser.getName(); 111 switch (eventType) 112 { 113 case XmlPullParser.START_TAG: 114 //如果是最开始的persons 根节点初始化 115 if("persons".equals(tagName)) 116 { 117 personList = new ArrayList<Person>(); 118 } else if("person".equals(tagName)) 119 { 120 //初始化person对象 121 person = new Person(); 122 123 //获得id 124 String id = parser.getAttributeValue(null, "id"); 125 person.setId(Integer.parseInt(id)); 126 } else if("name".equals(tagName)) 127 { 128 person.setName(parser.nextText()); 129 } else if("age".equals(tagName)) 130 { 131 person.setAge(Integer.parseInt(parser.nextText())); 132 } 133 break; 134 case XmlPullParser.END_TAG: 135 //如果是结束标记 136 if("person".equals(tagName)) 137 { 138 // 需要把上面设置好值的person对象添加到集合中 139 personList.add(person); 140 } 141 break; 142 default: 143 break; 144 } 145 //获得下一个事件 146 eventType = parser.next(); 147 } 148 return personList; 149 } catch (Exception e) 150 { 151 // TODO Auto-generated catch block 152 e.printStackTrace(); 153 } 154 return null; 155 } 156 157 }