Android:Xml(读取与存储)
1.读取XML文件
参数xml是建含xml数据的输入流,List<Person> persons用于存储xml流中的数据。
XmlPullParser类的几个方法:next(),nextToken() ,getEventType().
1 /** 2 * 获取xml数据 3 * */ 4 public List<Person> getPersons(InputStream xml) throws Exception{ 5 List<Person>persons=null; 6 Person person=null; 7 XmlPullParser pullParser=Xml.newPullParser(); 8 //为pull解析器设置要解析的xml数据,第一个参数为输入流,第二个为该数据的编码格式 9 pullParser.setInput(xml, "UTF-8"); 10 int envnt =pullParser.getEventType(); 11 while (envnt!=XmlPullParser.END_DOCUMENT) { 12 switch (envnt) { 13 case XmlPullParser.START_DOCUMENT: //开始文件时创建实例存储数据 14 persons=new ArrayList<Person>(); 15 break; 16 case XmlPullParser.START_TAG : //标签开始,读取数据部分 17 if("person".equals(pullParser.getName())){ 18 int id=new Integer(pullParser.getAttributeValue(0)); 19 person=new Person(); 20 person.setId(id); 21 } 22 if("name".equals(pullParser.getName())){ 23 String name=pullParser.nextText(); 24 person.setName(name); 25 } 26 if("age".equals(pullParser.getName())){ 27 Integer age=new Integer(pullParser.nextText()); 28 person.setAge(age); 29 }
30 pullParser.next(); //跳到到下一个标签 30 break; 31 case XmlPullParser.END_TAG: //标签结束部分 32 if("person".equals(pullParser.getName())){ 33 //建解析出来的数据保存在List中,后置空person 34 persons.add(person); 35 person=null; 36 } 37 break; 38 } 39 } 40 return persons; 41 }
2:将数据写入xml文件
out为需要存储的xml数据类型的数据,可以存储进xml的数据类型可以是List<Person>中的。也可以是其他类型的数据。
1 /** 2 * 保存xml数据 3 * */ 4 public void sava(List<Person> persons ,OutputStream out)throws Exception{ 5 //得到序列化器 6 XmlSerializer serializer=Xml.newSerializer(); 7 //见文件写入序列化器当中 8 serializer.setOutput(out, "UTF-8"); 9 //创建xml头文件 10 serializer.startDocument("UTF-8", true);//true 表示该文件能不能单独存在 11 //创建标签头 12 serializer.startTag(null, "persons");//参数以为该文件的命名空间,参数二为标签名 13 //创建标签尾 14 for(Person person:persons){ //循环读取person标签的数据 15 serializer.startTag(null, "person"); 16 serializer.attribute(null, "id", person.getId().toString()); 17 18 serializer.startTag(null, "name"); 19 serializer.text(person.getName().toString()); 20 serializer.endTag(null, "name"); 21 22 serializer.startTag(null, "age"); 23 serializer.text(person.getAge().toString()); 24 serializer.endTag(null, "age"); 25 //创建结束文档 26 serializer.endDocument(); 27 out.flush(); 28 out.close(); 29 } 30 }