Android生成与解析xml文件

一、生成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<Channel> parseXml(InputStream in) throws Exception{
    LIst<Channel> 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<Channel>();        //创建一个集合对象
            }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<Channel> 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();
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值