Android 解析XML天气数据

xml天气气象数据

<resp>
    <city>北京</city>
    <updatetime>10:46</updatetime>
    <wendu>-9</wendu>
    <fengli>
        <![CDATA[ 2级 ]]>
    </fengli>
    <shidu>19%</shidu>
    <fengxiang>西北风</fengxiang>
    <sunrise_1>07:36</sunrise_1>
    <sunset_1>16:59</sunset_1>
    <sunrise_2/>
    <sunset_2/>
    <yesterday>
        <date_1>29日星期二</date_1>
        <high_1>高温 -8℃</high_1>
        <low_1>低温 -13℃</low_1>
        <day_1>
            <type_1>晴</type_1>
            <fx_1>西北风</fx_1>
            <fl_1>
                <![CDATA[ 4级 ]]>
            </fl_1>
        </day_1>
        <night_1>
            <type_1>晴</type_1>
            <fx_1>西北风</fx_1>
            <fl_1>
                <![CDATA[ 4级 ]]>
            </fl_1>
        </night_1>
    </yesterday>
    <forecast>
        <weather>
            <date>30日星期三</date>
            <high>高温 -6℃</high>
            <low>低温 -13℃</low>
            <day>
                <type>晴</type>
                <fengxiang>西北风</fengxiang>
                <fengli>
                    <![CDATA[ 3级 ]]>
                </fengli>
            </day>
            <night>
                <type>晴</type>
                <fengxiang>西北风</fengxiang>
                <fengli>
                    <![CDATA[ 3级 ]]>
                </fengli>
            </night>
        </weather>
        <weather>
            <date>31日星期四</date>
            <high>高温 0℃</high>
            <low>低温 -11℃</low>
            <day>
                <type>晴</type>
                <fengxiang>西北风</fengxiang>
                <fengli>
                    <![CDATA[ 2级 ]]>
                </fengli>
            </day>
            <night>
                <type>晴</type>
                <fengxiang>西北风</fengxiang>
                <fengli>
                    <![CDATA[ 2级 ]]>
                </fengli>
            </night>
        </weather>
        <weather>
            <date>1日星期五</date>
            <high>高温 0℃</high>
            <low>低温 -11℃</low>
            <day>
                <type>晴</type>
                <fengxiang>东北风</fengxiang>
                <fengli>
                    <![CDATA[ 1级 ]]>
                </fengli>
            </day>
            <night>
                <type>晴</type>
                <fengxiang>东北风</fengxiang>
                <fengli>
                    <![CDATA[ 1级 ]]>
                </fengli>
            </night>
        </weather>
        <weather>
            <date>2日星期六</date>
            <high>高温 1℃</high>
            <low>低温 -9℃</low>
            <day>
                <type>多云</type>
                <fengxiang>北风</fengxiang>
                <fengli>
                    <![CDATA[ 2级 ]]>
                </fengli>
            </day>
            <night>
                <type>多云</type>
                <fengxiang>北风</fengxiang>
                <fengli>
                    <![CDATA[ 2级 ]]>
                </fengli>
            </night>
        </weather>
        <weather>
            <date>3日星期天</date>
            <high>高温 0℃</high>
            <low>低温 -8℃</low>
            <day>
                <type>多云</type>
                <fengxiang>东北风</fengxiang>
                <fengli>
                    <![CDATA[ 1级 ]]>
                </fengli>
            </day>
            <night>
                <type>多云</type>
                <fengxiang>东北风</fengxiang>
                <fengli>
                    <![CDATA[ 1级 ]]>
                </fengli>
            </night>
        </weather>
    </forecast>
</resp>

通过城市码获取xml数据

private void getWeatherDatafromNet(String cityCode) {
        final String address = "http://wthrcdn.etouch.cn/WeatherApi?citykey=" + cityCode;

        new Thread(new Runnable() {
            @Override
            public void run() {
                HttpURLConnection urlConnection = null;
                try {
                    URL url = new URL(address);
                    urlConnection = (HttpURLConnection) url.openConnection();
                    urlConnection.setRequestMethod("GET");
                    urlConnection.setConnectTimeout(8000);
                    urlConnection.setReadTimeout(8000);
                    InputStream in = urlConnection.getInputStream();
                    todayWeather = parseXML(in);

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();

    }

利用Dom4j库解析XML数据

public void parseXML(InputStream  inputStream) throws DocumentException {

        //1.创建sax解析器对象
        SAXReader reader = new SAXReader();
        //2.将xml数据读取到document 
        Document document =reader.read(inputStream);
        //3.获取根节点
        Element root = document.getRootElement();
        //4.获取根元素内容
        root.elementText("city");
        root.elementText("updatetime");
        root.elementText("wendu");
        root.elementText("fengli");
        root.elementText("shidu");
        root.elementText("fengxiang");
        root.elementText("yesterday");
        //5.获取根元素下的yesterday元素
        Element yesterday = root.element("yesterday");
        //6.获取yesterday元素的内容
        yesterday.elementText("date_1");
        yesterday.elementText("high_1");
        yesterday.elementText("low_1");
        //7.判断yesterday元素下的day_1元素是否有子元素
        if (yesterday.element("day_1") != null) {
            //8.获取yesterday元素下的day_1元素
            Element day_1_ele = yesterday.element("day_1");
            //9.获取day_1元素的内容
            day_1_ele.elementText("type_1");
            day_1_ele.elementText("fx_1");
            day_1_ele.elementText("fl_1");
        }
        //noght_1同理...
        
        //获取根元素下的forecast元素
        Element forecast = root.element("forecast");
        //将forecast元素下的5个weather放到list集合中
        List<Element> list = forecast.elements();
            for (int i = 0;i<list.size();i++) {
                //将每一个weather元素赋给ele 
                Element ele = list.get(i);
                //获取第一个weather元素的内容
                if (i==0){//今天
                    
                    ele.elementText("date");
                    ele.elementText("high");
                    ele.elementText("low");
                    
                    Log.d("30日",ele.elementText("date")+ele.elementText("high")+
                            ele.elementText("low"));
                    // 获取day
                    if (ele.element("day") != null) {
                        Element day_ele = ele.element("day");
                        day_ele.elementText("type");
                        day_ele.elementText("fengli");
                        day_ele.elementText("fengxiang");

                        Log.d("30日",day_ele.elementText("type")+day_ele.
elementText("fengli")+day_ele.elementText("fengxiang"));
                    }
                }else if (i==1){//明天
                    
                    ele.elementText("date");
                    ele.elementText("high");
                    ele.elementText("low");

                    Log.d("31日",ele.elementText("date")+ele.elementText("high")+
                            ele.elementText("low"));
                    // 获取day
                    if (ele.element("day") != null) {
                        Element day_ele = ele.element("day");
                        day_ele.elementText("type");
                        day_ele.elementText("fengli");
                        day_ele.elementText("fengxiang");

                        Log.d("31日",day_ele.elementText("type")+day_ele.elementText("fengli")+
                                day_ele.elementText("fengxiang"));
                    }
                }else if (i==2){//后天

                    ele.elementText("date");
                    ele.elementText("high");
                    ele.elementText("low");

                    Log.d("1日",ele.elementText("date")+ele.elementText("high")+
                            ele.elementText("low"));
                    // 获取day
                    if (ele.element("day") != null) {
                        Element day_ele = ele.element("day");
                        day_ele.elementText("type");
                        day_ele.elementText("fengli");
                        day_ele.elementText("fengxiang");

                        Log.d("1日",day_ele.elementText("type")+day_ele.elementText("fengli")+
                                day_ele.elementText("fengxiang"));
                    }
                }
        }
     
    }

参考文章:利用dom4j解析xml--天气预报
                  Android上实现一个简单的天气预报APP(六) 更新界面数据

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值