Android生成与解析xml文件
16lz
2021-01-23
一、生成xml文件(XmlSerializer方法)
与StringBuffer方式不同:
按钮点击事件改为:
public void click(View v){ try { XmlSerializer serializer = Xml.newSerializer(); File file = new File(Environment.getExternalStorageDirectory().getPath(),"Smsdata.xml"); FileOutputStream fos = new FileOutputStream(file); serializer.setOutput(fos,"utf-8"); serializer.startDocument("utf-8",true); serializer.startTag(null,"smss"); for (Sms sms : smsList){ serializer.startTag(null,"sms"); serializer.startTag(null,"address"); serializer.text(sms.getAddress()); serializer.endTag(null,"address"); serializer.startTag(null,"body"); serializer.text(sms.getBody()); serializer.endTag(null,"body"); serializer.startTag(null,"date"); serializer.text(sms.getDate()); serializer.endTag(null,"date"); serializer.endTag(null,"sms"); } serializer.endTag(null,"smss"); serializer.endDocument(); fos.close(); } catch (Exception e) { e.printStackTrace(); }}
二、解析xml文件(XmlPullParser)(模拟天气信息)
1.根据xml文件定义java实体类,包含属性,getter()、setter(),toString()显示方法
2.定义一个java类,功能是来解析xml
3.获取XmlPullParser解析实例
XmlPullParser parser = Xml.newPullParser();
4.设置XmlPullParser的参数
parser.setInput(in,"utf-8");
5.获取事件类型,不停的解析,在解析xml的类中定义方法
public static List parseXml(InputStream in) throws Exception{ LIst weatherLists = null; //定义一个集合 Channel channel = null; //定义一个实体对象 int type = parser.getEventType(); while(type!=XmlPullParser.END_DOCLMENT){ //不到结尾一直循环 switch(type){ case XmlPullParser.START_TAG: //开始标签 //开始具体判断是解析到了哪个节点 if("weather".equals(parser.getName())){ //如果是weather的开始标签 weatherLists = new ArrayList(); //创建一个集合对象 }else if("channel".equals(parser.getName())){ //如果是channel开始标签 channel = new Channel(); //创建Channel对象 String id = parse.getAttributeValue(0); //取出文件中id值,“0”含义为取第一位 channel.setId(id); //取出的id传给Channel对象 }else if("city".equals(parser.getName())){ //如果是city开始标签 String city = parser.nextText(); //取出city数据 channel.setCity(city); //取出的city值传给Channel对象 }else if("temp".equals(parser.getName())){ String temp= parser.nextText(); channel.setTemp(temp); }else if("wind".equals(parser.getName())){ String wind= parser.nextText(); //同上取出temp、wind、pm250值 channel.setWind(wind); }else if("pm250".equals(parser.getName())){ String pm250= parser.nextText(); channel.setPm250(pm250); } break; case XmlPullParser.END_TAG: //结束标签 if("channel".equals(parser.getName())){ //如果结束标签为channel weatherLists.add(channel); //将Channel对象放入集合中 } break; } type = parser.next(); //下一个事件类型给type } return weatherLists; //返回集合}
6.在MainActivity中调用所定义的解析方法
try{ findViewById(R.id.tv_weather); //(1)定义TextView控件,并找到控件 //(2)调用我们定义的解析xml方法 List weatherlists = WeatherParser.parserXml(inputStream); StringBuffer sb = new StringBuffer(); //(3)组拼数据 for(Channel channel : weatherlists){ sb.append(channel.toString()); } tv_weather.setText(sb.toString()); //(4)将数据展示到控件上}catch(Exception e){ e.printStackTrace();}
更多相关文章
- Android Makefile中如何自定义Product
- android 自定义控件实现波浪效果(八)
- android 自定义控件pickview
- Android自定义对话框去掉白色边框
- android开源系列:CircleImageView自定义圆形控件的使用
- Android 自定义弹窗
- 优酷自定义菜单功能学习
- android 自定义属性实现 ImageView 透明度渐变效果
- Android 自定义拨打电话程序段