XML的解析和序列化
1 public class Test extends TestCase { 2 3 public void test() throws IllegalStateException, RuntimeException, IOException { 4 writeXMLTOLocal(); 5 6 List<Person> personList = parserXmlFromLocal(); 7 8 for (Person person : personList) { 9 Log.i("TestCase", person.toString()); 10 } 11 } 12 13 public void writeXMLTOLocal() throws RuntimeException, 14 IllegalStateException, IOException { 15 List<Person> personlist = getPersondList(); 16 // 获得序列化对象 17 XmlSerializer serializer = Xml.newSerializer(); 18 19 File path = new File(Environment.getExternalStorageDirectory(), 20 "person.xml"); 21 FileOutputStream fos; 22 try { 23 fos = new FileOutputStream(path); 24 serializer.setOutput(fos, "utf-8"); 25 26 serializer.startDocument("utf-8", true); 27 serializer.startTag(null, "persons"); 28 29 for (Person person : personlist) { 30 serializer.startTag(null, "person"); 31 serializer.attribute(null, "id", String.valueOf(person.getId())); 32 33 serializer.startTag(null, "name"); 34 serializer.text(person.getName()); 35 serializer.endTag(null, "name"); 36 37 // 写年龄 38 serializer.startTag(null, "age"); // <age> 39 serializer.text(String.valueOf(person.getAge())); 40 serializer.endTag(null, "age"); // </age> 41 42 serializer.endTag(null, "person"); // </person> 43 } 44 45 serializer.endTag(null, "persons"); // </persons> 46 47 serializer.endDocument(); // 结束 48 } catch (FileNotFoundException e) { 49 // TODO Auto-generated catch block 50 e.printStackTrace(); 51 } 52 53 } 54 55 private List<Person> parserXmlFromLocal() { 56 try { 57 File path = new File(Environment.getExternalStorageDirectory(), "person.xml"); 58 FileInputStream fis = new FileInputStream(path); 59 60 // 获得pull解析器对象 61 XmlPullParser parser = Xml.newPullParser(); 62 // 指定解析的文件和编码格式 63 parser.setInput(fis, "utf-8"); 64 65 int eventType = parser.getEventType(); // 获得事件类型 66 67 List<Person> personList = null; 68 Person person = null; 69 String id; 70 while(eventType != XmlPullParser.END_DOCUMENT) { 71 String tagName = parser.getName(); // 获得当前节点的名称 72 73 switch (eventType) { 74 case XmlPullParser.START_TAG: // 当前等于开始节点 <person> 75 if("persons".equals(tagName)) { // <persons> 76 personList = new ArrayList<Person>(); 77 } else if("person".equals(tagName)) { // <person id="1"> 78 person = new Person(); 79 id = parser.getAttributeValue(null, "id"); 80 person.setId(Integer.valueOf(id)); 81 } else if("name".equals(tagName)) { // <name> 82 person.setName(parser.nextText()); 83 } else if("age".equals(tagName)) { // <age> 84 person.setAge(Integer.parseInt(parser.nextText())); 85 } 86 break; 87 case XmlPullParser.END_TAG: // </persons> 88 if("person".equals(tagName)) { 89 // 需要把上面设置好值的person对象添加到集合中 90 personList.add(person); 91 } 92 break; 93 default: 94 break; 95 } 96 97 eventType = parser.next(); // 获得下一个事件类型 98 } 99 return personList; 100 } catch (Exception e) { 101 e.printStackTrace(); 102 } 103 return null; 104 } 105 private List<Person> getPersondList() { 106 List<Person> personlist = new ArrayList<Person>(); 107 for (int i = 0; i < 30; i++) { 108 personlist.add(new Person(i, "wang" + i, 18 + i)); 109 } 110 111 return personlist; 112 } 113 114 }