数据存储(五):xml的生成和解析
#1.使用序列化器生成一个xml文件
//1,初始化一个xml文件的序列化器 XmlSerializerserializer=Xml.newSerializer(); //2.初始化序列器参数 Filefile=newFile(Environment.getExternalStorageDirectory(),"backup.xml"); FileOutputStreamfos=newFileOutputStream(file); serializer.setOutput(fos,"UTF-8"); //3.开始写xml文件. serializer.startDocument("UTF-8",true); serializer.startTag(null,"smss"); for(SmsInfoinfo:smsInfos){ //开始写sms节点 serializer.startTag(null,"sms"); //开始写body节点 serializer.startTag(null,"body"); serializer.text(info.getBody()); //body节点结束 serializer.endTag(null,"body"); //开始写address节点 serializer.startTag(null,"address"); serializer.text(info.getAddress()); serializer.endTag(null,"address"); //开始写data节点 serializer.startTag(null,"date"); serializer.text(info.getDate()+""); serializer.endTag(null,"date"); //sms节点结束 serializer.endTag(null,"sms"); } //smss根节点结束 serializer.endTag(null,"smss"); //xml结束 serializer.endDocument(); fos.close(); Toast.makeText(this,"备份短信成功",0).show(); }catch(Exceptione){ e.printStackTrace(); Toast.makeText(this,"备份短信失败",0).show(); }
#12.使用pull解析xml格式的数据(重要)
publicclassMainActivityextendsActivity{ @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); //设置activity显示的布局 setContentView(R.layout.activity_main); TextViewtv_info=(TextView)findViewById(R.id.tv_info); StringBuildersb=newStringBuilder(); try{ //获取我们解析出来的天气信息 List<Channel>channels=WeatherService.getAllWeatherInfos(getClass().getClassLoader().getResourceAsStream("weather.xml")); for(Channelchannel:channels){ sb.append(channel.toString()); sb.append("n"); } //把解析出来的天气信息设置到textview上 tv_info.setText(sb.toString()); }catch(Exceptione){ e.printStackTrace(); Toast.makeText(this,"解析天气信息失败",0).show(); } }
}
---------------------------------------------------------------
publicclassWeatherService{ /** *解析服务器返回的数据获取天气信息 *@paramis服务器返回的包含天气信息的流(xml) *@return */ publicstaticList<Channel>getAllWeatherInfos(InputStreamis)throwsException{ List<Channel>channels=null; Channelchannel=null; //1.获取xml解析器 XmlPullParserparser=Xml.newPullParser(); //2.设置xml解析器的参数 parser.setInput(is,"utf-8"); //3.开始解析xml文件. inttype=parser.getEventType();//获取当前的事件的类型 while(type!=XmlPullParser.END_DOCUMENT){//需要让pull解析器解析到文件的末尾 switch(type){ caseXmlPullParser.START_TAG: if("weather".equals(parser.getName())){//总的开始节点 channels=newArrayList<Channel>();//初始化集合 }elseif("channel".equals(parser.getName())){//某个城市的信息开始了. channel=newChannel(); //获取到id的属性值 Stringid=parser.getAttributeValue(0); channel.setId(Integer.parseInt(id)); //解析city节点 }elseif("city".equals(parser.getName())){ Stringcity=parser.nextText(); channel.setCity(city); //解析温度节点 }elseif("temp".equals(parser.getName())){ Stringtemp=parser.nextText(); channel.setTemp(temp); //解析风力节点 }elseif("wind".equals(parser.getName())){ Stringwind=parser.nextText(); channel.setWind(wind); //解析pm250节点 }elseif("pm250".equals(parser.getName())){ Stringpm250=parser.nextText(); channel.setPm250(Integer.parseInt(pm250)); } break; //判断xml的结束节点 caseXmlPullParser.END_TAG: if("channel".equals(parser.getName())){ //把解析的内容加入到集合中 channels.add(channel); channel=null; } break; } type=parser.next(); } is.close(); returnchannels;//把所有的频道的集合返回回去 } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |