复杂pull解析

package com.animee.day15.xml_test;


import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;


import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;


/**
 * Created by Administrator on 2018/1/12.
 * 解析网络的xml数据的类
 */
public class ParseXML {


    public static WeatherBean parseXML(String content){
        WeatherBean bean = new WeatherBean();
        List<WeatherBean.Weather>weatherList = new ArrayList<>();
        List<WeatherBean.Zhishu>zhishuList = new ArrayList<>();
        bean.setWeatherList(weatherList);
        bean.setZhishuList(zhishuList);


//        开始解析---》pull解析
//        1.获得工厂类对象
        try {
            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
//            2.获得解析器对象
            XmlPullParser pullParser = factory.newPullParser();
//            3.设置需要解析的数据源
//            把String转化成输入流
            ByteArrayInputStream bais = new ByteArrayInputStream(content.getBytes());
            pullParser.setInput(bais,"utf-8");  //第一个参数:输入流,第二个参数:编码格式
//            4.获得响应码
            int code = pullParser.getEventType();
//             在循环开始之前,想把添加到集合当中的对象的引用,获取到
            WeatherBean.Weather weather = null;
            WeatherBean.Zhishu zhishu = null;


            while (code != XmlPullParser.END_DOCUMENT) {
//                获取正在被解析的标签名
                String name = pullParser.getName();
                switch (code) {
                    case XmlPullParser.START_TAG:
                        if (name.equals("city")) {
                            String city = pullParser.nextText();
                            bean.setCity(city);
                        }else if (name.equals("updatetime")) {
                            bean.setUpdatetime(pullParser.nextText());
                        }else if (name.equals("wendu")) {
                            bean.setWendu(pullParser.nextText());
                        }else if (name.equals("shidu")) {
                            bean.setShidu(pullParser.nextText());
                        }else if (name.equals("fengxiang")) {
                            bean.setFengxiang(pullParser.nextText());
                        }else if (name.equals("weather")) {
                            weather = new WeatherBean.Weather();
                        }else if (name.equals("date")) {
                            weather.setDate(pullParser.nextText());
                        }else if (name.equals("high")) {
                            weather.setHigh(pullParser.nextText());
                        }else if (name.equals("low")) {
                            weather.setLow(pullParser.nextText());
                        }else if (name.equals("zhishu")) {
                            zhishu = new WeatherBean.Zhishu();
                        }else if (name.equals("name")) {
                            zhishu.setName(pullParser.nextText());
                        }else if (name.equals("value")) {
                            zhishu.setValue(pullParser.nextText());
                        }else if (name.equals("detail")) {
                            zhishu.setDetail(pullParser.nextText());
                        }
                        break;
                    case XmlPullParser.END_TAG:
                        if (name.equals("weather")) {
                            weatherList.add(weather);
                        }else if (name.equals("zhishu")) {
                            zhishuList.add(zhishu);
                        }
                        break;
                }
//                移动指针,指向下一个节点
                code = pullParser.next();
            }


        } catch (XmlPullParserException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }


        return bean;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值