数据存储五: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;//把所有的频道的集合返回回去

}

}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇