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 }