//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();
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;//把所有的频道的集合返回回去
}
}
原文链接:https://www.f2er.com/xml/296015.html