android dom解析xml

本文介绍了一种在Android开发中解析XML天气预报数据的方法。使用DOM解析方式从XML中提取关键信息,如城市名、温度、天气状况等,并封装到实体类中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android开发中用的最多的是json数据,很少用到xml,上次项目中需要获取天气预报的xml数据,于是研究了下xml解析,我使用的是dom解析,贴出代码,大家交流学习~

服务端xml数据:

这里写代码片
<response>
<status>0</status>
<result>
<city>深圳市</city>
<update_time>2015-06-29</update_time>
<temperature>33 ~ 28℃</temperature>
<weather>多云</weather>
<wind>微风</wind>
<ultraviolet>中等</ultraviolet>
<create_time>2015-06-29 13:30:36</create_time>
<weather_future>
<temperature_1>33 ~ 28℃</temperature_1>
<weather_1>多云</weather_1>
<wind_1>微风</wind_1>
<temperature_2>33 ~ 28℃</temperature_2>
<weather_2>阵雨</weather_2>
<wind_2>微风</wind_2>
</weather_future>
</result>
</response>

android解析代码:返回天气实体对象,就一个方法。


这里写代码片
public static WeatherInfo parseXml(InputStream inStream) throws Exception {
WeatherInfo weatherInfo = null;

    // 实例化一个文档构建器工厂
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    // 通过文档构建器工厂获取一个文档构建器
    DocumentBuilder builder = factory.newDocumentBuilder();
    // 通过文档构建器构建一个文档实例
    Document document = builder.parse(inStream);
    // 获取XML文件根节点
    Element root = document.getDocumentElement();
    //获取根节点下的所有子节点
    NodeList versionNode = root.getChildNodes();

    //遍历所有子节点,过滤节点
    for (int i = 0; i < versionNode.getLength(); i++) {
        //获取子节点
        Node versionN = (Node) versionNode.item(i);
        //如果是元素节点,将节点强制转换成元素节点
        if (versionN.getNodeType() == Node.ELEMENT_NODE) {
            Element versionRoot = (Element) versionN;
            //在获取result下的子节点
            if ("result".equals(versionRoot.getNodeName())) {

                // 获得所有子节点,遍历result节点中的子节点
                NodeList childNodes = versionRoot.getChildNodes();
                //实例化封装数据的实体,天气
                weatherInfo = new WeatherInfo();
                for (int j = 0; j < childNodes.getLength(); j++) {
                    // 遍历子节点,获取对应想要的数据
                    Node childNode = (Node) childNodes.item(j);
                    if (childNode.getNodeType() == Node.ELEMENT_NODE) {
                        Element childElement = (Element) childNode;

                        //城市
                        if ("city".equals(childElement.getNodeName())) {

                            weatherInfo.setCity(childElement
                                    .getFirstChild().getNodeValue());
                        }
                        //更新时间
                        else if (("update_time".equals(childElement
                                .getNodeName()))) {
                            weatherInfo.setUpdate_time(childElement
                                    .getFirstChild().getNodeValue());                       //温度
                        } else if (("temperature").equals(childElement
                                .getNodeName())) {
                            weatherInfo.setToday_temperature(childElement
                                    .getFirstChild().getNodeValue());
                        }

                        else if (("weather").equals(childElement
                                .getNodeName())) {
                            weatherInfo.setToday_weather(childElement
                                    .getFirstChild().getNodeValue());
                        } else if (("wind").equals(childElement
                                .getNodeName())) {
                            weatherInfo.setToday_wind(childElement
                                    .getFirstChild().getNodeValue());
                        }

                        else if (("ultraviolet").equals(childElement
                                .getNodeName())) {
                            weatherInfo.setToday_ultraviolet(childElement
                                    .getFirstChild().getNodeValue());
                        }

                        else if (("create_time").equals(childElement
                                .getNodeName())) {
                            weatherInfo.setCreate_time(childElement
                                    .getFirstChild().getNodeValue());
                        }

                        else if (("weather_future").equals(childElement
                                .getNodeName())) {
                            NodeList childNodes1 = childElement
                                    .getChildNodes();

                            for (int k = 0; k < childNodes1.getLength(); k++) {
                                Node childNode1 = (Node) childNodes1
                                        .item(k);
                                if (childNode1.getNodeType() == Node.ELEMENT_NODE) {
                                    Element childElement1 = (Element) childNode1;

                                    if (("temperature_1")
                                            .equals(childElement1
                                                    .getNodeName())) {

                                        weatherInfo
                                                .setTomorrow_temperature(childElement1
                                                        .getFirstChild()
                                                        .getNodeValue());
                                    } else if (("weather_1")
                                            .equals(childElement1
                                                    .getNodeName())) {
                                        weatherInfo
                                                .setTomorrow_weather(childElement1
                                                        .getFirstChild()
                                                        .getNodeValue());
                                    } else if (("wind_1")
                                            .equals(childElement1
                                                    .getNodeName())) {
                                        weatherInfo
                                                .setTomorrow_wind(childElement1
                                                        .getFirstChild()
                                                        .getNodeValue());
                                    } else if (("temperature_2")
                                            .equals(childElement1
                                                    .getNodeName())) {
                                        weatherInfo
                                                .setDft_temperature(childElement1
                                                        .getFirstChild()
                                                        .getNodeValue());
                                    } else if (("weather_2")
                                            .equals(childElement1
                                                    .getNodeName())) {
                                        weatherInfo
                                                .setDft_weather(childElement1
                                                        .getFirstChild()
                                                        .getNodeValue());
                                    } else if (("wind_2")
                                            .equals(childElement1
                                                    .getNodeName())) {
                                        weatherInfo
                                                .setDft_wind(childElement1
                                                        .getFirstChild()
                                                        .getNodeValue());
                                    }

                                }

                            }
                        }
                    }
                }
            }

        }
    }
    return weatherInfo;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值