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(六) 更新界面数据