数据存储(五):xml的生成和解析

前端之家收集整理的这篇文章主要介绍了数据存储(五):xml的生成和解析前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

@H_502_2@#1.使用序列化器生成一个xml文件

@H_502_2@

@H_502_2@//1,初始化一个xml文件的序列化器

@H_502_2@XmlSerializerserializer=Xml.newSerializer();

@H_502_2@//2.初始化序列器参数

@H_502_2@Filefile=newFile(Environment.getExternalStorageDirectory(),"backup.xml");

@H_502_2@FileOutputStreamfos=newFileOutputStream(file);

@H_502_2@serializer.setOutput(fos,"UTF-8");

@H_502_2@//3.开始写xml文件.

@H_502_2@serializer.startDocument("UTF-8",true);

@H_502_2@serializer.startTag(null,"smss");

@H_502_2@for(SmsInfoinfo:smsInfos){

@H_502_2@//开始写sms节点

@H_502_2@serializer.startTag(null,"sms");

@H_502_2@//开始写body节点

@H_502_2@serializer.startTag(null,"body");

@H_502_2@serializer.text(info.getBody());

@H_502_2@//body节点结束

@H_502_2@serializer.endTag(null,"body");

@H_502_2@//开始写address节点

@H_502_2@serializer.startTag(null,"address");

@H_502_2@serializer.text(info.getAddress());

@H_502_2@serializer.endTag(null,"address");

@H_502_2@//开始写data节点

@H_502_2@serializer.startTag(null,"date");

@H_502_2@serializer.text(info.getDate()+"");

@H_502_2@serializer.endTag(null,"date");

@H_502_2@//sms节点结束

@H_502_2@serializer.endTag(null,"sms");

@H_502_2@}

@H_502_2@//smss根节点结束

@H_502_2@serializer.endTag(null,"smss");

@H_502_2@//xml结束

@H_502_2@serializer.endDocument();

@H_502_2@fos.close();

@H_502_2@Toast.makeText(this,"备份短信成功",0).show();

@H_502_2@}catch(Exceptione){

@H_502_2@e.printStackTrace();

@H_502_2@Toast.makeText(this,"备份短信失败",0).show();

@H_502_2@}

@H_502_2@

@H_502_2@

@H_502_2@#12.使用pull解析xml格式的数据(重要)

@H_502_2@

@H_502_2@

@H_502_2@publicclassMainActivityextendsActivity{

@H_502_2@@Override

@H_502_2@protectedvoidonCreate(BundlesavedInstanceState){

@H_502_2@super.onCreate(savedInstanceState);

@H_502_2@//设置activity显示的布局

@H_502_2@setContentView(R.layout.activity_main);

@H_502_2@TextViewtv_info=(TextView)findViewById(R.id.tv_info);

@H_502_2@StringBuildersb=newStringBuilder();

@H_502_2@try{

@H_502_2@//获取我们解析出来的天气信息

@H_502_2@List<Channel>channels=WeatherService.getAllWeatherInfos(getClass().getClassLoader().getResourceAsStream("weather.xml"));

@H_502_2@for(Channelchannel:channels){

@H_502_2@sb.append(channel.toString());

@H_502_2@sb.append("\n");

@H_502_2@}

@H_502_2@//把解析出来的天气信息设置到textview

@H_502_2@tv_info.setText(sb.toString());

@H_502_2@}catch(Exceptione){

@H_502_2@e.printStackTrace();

@H_502_2@Toast.makeText(this,"解析天气信息失败",0).show();

@H_502_2@}

@H_502_2@}

@H_502_2@

@H_502_2@}

@H_502_2@

@H_502_2@

@H_502_2@---------------------------------------------------------------

@H_502_2@

@H_502_2@publicclassWeatherService{

@H_502_2@/**

@H_502_2@*解析服务器返回的数据获取天气信息

@H_502_2@*@paramis服务器返回的包含天气信息的流(xml)

@H_502_2@*@return

@H_502_2@*/

@H_502_2@publicstaticList<Channel>getAllWeatherInfos(InputStreamis)throwsException{

@H_502_2@List<Channel>channels=null;

@H_502_2@Channelchannel=null;

@H_502_2@//1.获取xml解析器

@H_502_2@XmlPullParserparser=Xml.newPullParser();

@H_502_2@//2.设置xml解析器的参数

@H_502_2@parser.setInput(is,"utf-8");

@H_502_2@//3.开始解析xml文件.

@H_502_2@inttype=parser.getEventType();//获取当前的事件的类型

@H_502_2@while(type!=XmlPullParser.END_DOCUMENT){//需要让pull解析器解析到文件的末尾

@H_502_2@switch(type){

@H_502_2@caseXmlPullParser.START_TAG:

@H_502_2@if("weather".equals(parser.getName())){//总的开始节点

@H_502_2@channels=newArrayList<Channel>();//初始化集合

@H_502_2@}elseif("channel".equals(parser.getName())){//某个城市的信息开始了.

@H_502_2@channel=newChannel();

@H_502_2@//获取id属性

@H_502_2@Stringid=parser.getAttributeValue(0);

@H_502_2@channel.setId(Integer.parseInt(id));

@H_502_2@//解析city节点

@H_502_2@}elseif("city".equals(parser.getName())){

@H_502_2@Stringcity=parser.nextText();

@H_502_2@channel.setCity(city);

@H_502_2@//解析温度节点

@H_502_2@}elseif("temp".equals(parser.getName())){

@H_502_2@Stringtemp=parser.nextText();

@H_502_2@channel.setTemp(temp);

@H_502_2@//解析风力节点

@H_502_2@}elseif("wind".equals(parser.getName())){

@H_502_2@Stringwind=parser.nextText();

@H_502_2@channel.setWind(wind);

@H_502_2@//解析pm250节点

@H_502_2@}elseif("pm250".equals(parser.getName())){

@H_502_2@Stringpm250=parser.nextText();

@H_502_2@channel.setPm250(Integer.parseInt(pm250));

@H_502_2@}

@H_502_2@break;

@H_502_2@//判断xml的结束节点

@H_502_2@caseXmlPullParser.END_TAG:

@H_502_2@if("channel".equals(parser.getName())){

@H_502_2@//把解析的内容加入到集合中

@H_502_2@channels.add(channel);

@H_502_2@channel=null;

@H_502_2@}

@H_502_2@break;

@H_502_2@}

@H_502_2@type=parser.next();

@H_502_2@}

@H_502_2@is.close();

@H_502_2@returnchannels;//把所有的频道的集合返回回去

@H_502_2@}

@H_502_2@}

原文链接:https://www.f2er.com/xml/296015.html

猜你在找的XML相关文章