android 根据输入流解析xml,android 通过pull解析xml文件

1 packagecom.example.xmldemo.test;2

3 importjava.io.File;4 importjava.io.FileInputStream;5 importjava.io.FileNotFoundException;6 importjava.io.FileOutputStream;7 importjava.io.IOException;8 importjava.io.InputStreamReader;9 importjava.util.ArrayList;10 importjava.util.List;11

12 importorg.xmlpull.v1.XmlPullParser;13 importorg.xmlpull.v1.XmlSerializer;14

15 importcom.example.xmldemo.Person;16

17 importandroid.os.Environment;18 importandroid.test.AndroidTestCase;19 importandroid.util.Log;20 importandroid.util.Xml;21

22 public class XmlTest extendsAndroidTestCase23 {24 public voidtest()25 {26 writeLocal();27

28 List personList =parseXml();29 for(Person person : personList)30 {31 Log.i("XmlTest", person.toString());32 }33 }34 /**

35 * 写xml文件大本地36 */

37 public voidwriteLocal()38 {39 List 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 = newFileOutputStream(file);48 //设置文件的输出流

49 serializer.setOutput(fos, "UTF-8");50 serializer.startDocument("utf-8", true); //<?xml version

51 serializer.startTag(null, "persons"); //

52 for(Person person : personList)53 {54 serializer.startTag(null, "person"); //

55 serializer.attribute(null, "id", String.valueOf(person.getId()));56 serializer.startTag(null, "name"); //

57 serializer.text(person.getName()); //kite1

58 serializer.endTag(null, "name"); //

59 serializer.startTag(null, "age"); //

60 serializer.text(String.valueOf(person.getAge()));61 serializer.endTag(null, "age");//

62 serializer.endTag(null, "person"); //

63 }64 serializer.endTag(null, "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 * 获得personList77 *@return

78 */

79 public ListgetPersonList()80 {81 List personList = new ArrayList();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 returnpersonList;88 }89

90 public ListparseXml()91 {92

93 try

94 {95 //创建文件流对象

96 File file = new File("data/data/com.example.xmldemo", "persons.xml");97 FileInputStream fis = newFileInputStream(file);98 //获得pull 解析对象

99 XmlPullParser parser =Xml.newPullParser();100 //指定解析的文件和编码格式

101 parser.setInput(fis,"utf-8");102 int eventType = parser.getEventType(); //获得事件的类型103

104 //初始化集合

105 List 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 caseXmlPullParser.START_TAG:114 //如果是最开始的persons 根节点初始化

115 if("persons".equals(tagName))116 {117 personList = new ArrayList();118 } else if("person".equals(tagName))119 {120 //初始化person对象

121 person = newPerson();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 caseXmlPullParser.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 returnpersonList;149 } catch(Exception e)150 {151 //TODO Auto-generated catch block

152 e.printStackTrace();153 }154 return null;155 }156

157 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值