第一次解析xml,有点小激动,正好找个天气预报例子,放眼望去,不知道咋解析,但告诉自己如果这个经典例子都会了,以后一般的xml难不倒你.
后来就努力搜索相关资料,终于把我感兴趣的数据都解析出来了,在此跟大家一起分享下.
在解析xml之前我们先获取下xml文件,这里以天气预报接口为例,
在浏览器里输入http://wthrcdn.etouch.cn/WeatherApi?city=杭州就可以获取到杭州的当天天气.
将获取到的网页保存为xml文件.网页部分内容为:
我将所有的节点收缩起来查看
主要有环境,昨天预报,未来天气预报,生活指数等.这里我们以解析未来天气预报和生活指数为例.
首先我们需要根据xml创建Resp类.
public class Resp { public String city; public String updatetime; public String wendu; public String fengli; public String shidu; public String fengxiang; public String sunrise_1; public String sunset_1; public String sunrise_2; public String sunset_2; public List<Weather> listWeather; public List<Zhishu> listZhishu; public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getUpdatetime() { return updatetime; } public void setUpdatetime(String updatetime) { this.updatetime = updatetime; } public String getWendu() { return wendu; } public void setWendu(String wendu) { this.wendu = wendu; } public String getFengli() { return fengli; } public void setFengli(String fengli) { this.fengli = fengli; } public String getShidu() { return shidu; } public void setShidu(String shidu) { this.shidu = shidu; } public String getFengxiang() { return fengxiang; } public void setFengxiang(String fengxiang) { this.fengxiang = fengxiang; } public String getSunrise_1() { return sunrise_1; } public void setSunrise_1(String sunrise_1) { this.sunrise_1 = sunrise_1; } public String getSunset_1() { return sunset_1; } public void setSunset_1(String sunset_1) { this.sunset_1 = sunset_1; } public String getSunrise_2() { return sunrise_2; } public void setSunrise_2(String sunrise_2) { this.sunrise_2 = sunrise_2; } public String getSunset_2() { return sunset_2; } public void setSunset_2(String sunset_2) { this.sunset_2 = sunset_2; } public List<Weather> getListWeather() { return listWeather; } public void setListWeather(List<Weather> listWeather) { this.listWeather = listWeather; } public List<Zhishu> getListZhishu() { return listZhishu; } public void setListZhishu(List<Zhishu> listZhishu) { this.listZhishu = listZhishu; } }
package weather; public class Weather { public String date; public String high; public String low; public String getDate() { return date; } public void setDate(String date) { this.date = date; } public String getHigh() { return high; } public void setHigh(String high) { this.high = high; } public String getLow() { return low; } public void setLow(String low) { this.low = low; } public Day getDay() { return day; } public void setDay(Day day) { this.day = day; } public Night getNight() { return night; } public void setNight(Night night) { this.night = night; } public Day day; public Night night; }
package weather; public class Day { public String type; public String fengxiang; public String fengli; public String getType() { return type; } public void setType(String type) { this.type = type; } public String getFengxiang() { return fengxiang; } public void setFengxiang(String fengxiang) { this.fengxiang = fengxiang; } public String getFengli() { return fengli; } public void setFengli(String fengli) { this.fengli = fengli; } }
package weather; public class Night { public String type; public String fengli; public String fengxiang; public Night(String type, String fengli, String fengxiang) { super(); this.type = type; this.fengli = fengli; this.fengxiang = fengxiang; } public String getType() { return type; } public String getFengli() { return fengli; } public String getFengxiang() { return fengxiang; } }
package weather; public class Zhishu { public String name; public String value; public String detail; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } public String getDetail() { return detail; } public void setDetail(String detail) { this.detail = detail; } }
package weather; import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class XmlReader { public static final String fileName = "xml/weather.xml"; public static Resp read(String fileName) throws DocumentException { File xmlFile = new File(fileName); return read(xmlFile); } private static Resp read(File xmlFile) throws DocumentException { // 使用SAX方式解析xml SAXReader saxReader = new SAXReader(); // 把xml文件转换成文档对象 Document document = saxReader.read(xmlFile); // 取得根节点 Element rootNode = document.getRootElement(); // 取得所有的二级(下一级)子节点 return getNode(rootNode); } private static Resp getNode(Element rootNode) { // 新建Resp对象 Resp resp = new Resp(); // 获取城市名称 resp.setCity(rootNode.element("city").getText()); resp.setFengli(rootNode.element("fengli").getText()); resp.setFengxiang(rootNode.element("fengxiang").getText()); resp.setShidu(rootNode.element("shidu").getText()); resp.setSunrise_1(rootNode.element("sunrise_1").getText()); resp.setSunrise_2(rootNode.element("sunrise_2").getText()); resp.setSunset_1(rootNode.element("sunset_1").getText()); resp.setSunset_2(rootNode.element("sunset_2").getText()); resp.setUpdatetime(rootNode.element("updatetime").getText()); resp.setWendu(rootNode.element("wendu").getText()); Element forecast = rootNode.element("forecast"); List<Element> list = forecast.elements(); //将weather集合设置进resp. resp.setListWeather(getWeather(list)); Element zhishus = rootNode.element("zhishus"); List<Element> listzhishus = zhishus.elements(); //将zhishus集合设置进resp. resp.setListZhishu(getZhishus(listzhishus)); return resp; } private static List getZhishus(List<Element> list) { List<Zhishu> zs_list = new ArrayList<Zhishu>(); for (Element ele : list) { Zhishu zs = new Zhishu(); // 获取每一天的天气 zs.setName(ele.element("name").getText()); // 获取当天的最高温度 zs.setValue(ele.element("value").getText()); // 获取当天的最低温度 zs.setDetail(ele.element("detail").getText()); zs_list.add(zs); } return zs_list; } private static List getWeather(List<Element> list) { List<Weather> wea_list = new ArrayList<Weather>(); for (Element ele : list) { Weather weath = new Weather(); // 获取每一天的天气 weath.setDate(ele.element("date").getText()); // 获取当天的最高温度 weath.setHigh(ele.element("high").getText()); // 获取当天的最低温度 weath.setLow(ele.element("low").getText()); // 获取day if (ele.element("day")!=null) { Element day_ele = ele.element("day"); Day day = new Day(); day.setType(day_ele.element("type").getText()); day.setFengli(day_ele.element("fengli").getText()); day.setFengxiang(day_ele.element("fengxiang").getText()); weath.setDay(day); } //获取night if (ele.element("night")!=null) { Element day_ele = ele.element("night"); Night night = new Night(day_ele.element( "type").getText(), day_ele.element("fengli").getText(), day_ele.element("fengxiang").getText()); weath.setNight(night); } wea_list.add(weath); } return wea_list; } //测试 public static void main(String[] args) throws DocumentException { Resp resp = read(fileName); System.out.println(resp.getCity()); System.out.println("湿度 "+resp.getShidu()); List<Weather> list = resp.getListWeather(); List<Zhishu> zslist = resp.getListZhishu(); System.out.println("***************************************************"); for(Weather wea : list){ System.out.println(wea.getDate()); System.out.println(wea.getHigh()); System.out.println(wea.getDay().getType()); System.out.println(wea.getDay().getFengxiang()); System.out.println("--------------------------------------"); } System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"); for(Zhishu zs : zslist){ System.out.println(zs.getName()); System.out.println(zs.getValue()); System.out.println(zs.getDetail()); System.out.println("--------------------------------------"); } } }
当然了我们还得在lib目录下添加dom4j-1.6.1.jar
到此为止我们已经将我们感兴趣的内容提取到Resp里了,赶紧动手起来运行看看吧~