HttpUtils:

package cn.qf.parser;

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException; import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils; /**
* HttpClient请求网络 获取XML数据
*
* @author my
*
*/
public class HttpUtils {
/**
* Http请求网络获取xml数据
* 下载图片
* @param path
*/
public static void downLoadImg(String path) {
BufferedOutputStream bos = null;
try {
// 1.创建HttpCLient对象
HttpClient httpClient = new DefaultHttpClient();
// 2.创建请求对象 指定地址
HttpGet htpGet = new HttpGet(path);
// 3.执行请求 获得HttpResponse对象
HttpResponse response = httpClient.execute(htpGet);
// 4.获得响应码
int code = response.getStatusLine().getStatusCode();
if (code == 200) {
// 获得响应的HttpEntity对象
HttpEntity entity = response.getEntity();
String name = path.substring(path.lastIndexOf("/") + 1);
bos = new BufferedOutputStream(new FileOutputStream(name));
bos.write(EntityUtils.toByteArray(entity));
bos.flush();
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (bos != null) {
try {
bos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/**
* 从网络下载Xml文件
* @param path
* @return
*/
public static String getXMLByInternet(String path) {
try {
// 1.创建httpClient对象
HttpClient httpClient = new DefaultHttpClient();
// 2.创建请求对象 指定地址
HttpGet httpGet = new HttpGet(path);
// 3.执行请求,获得HttpResponse对象
HttpResponse response = httpClient.execute(httpGet);
// 4.获得响应码
int code = response.getStatusLine().getStatusCode();
if (code == 200) {
// 获得响应的httpEntity对象__客户端服务端传递的载体
HttpEntity entity = response.getEntity();
return EntityUtils.toString(entity, "GBK");
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} return null;
}
}

ParserDemo.java

package com.qf.PullParser4;

import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List; import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory; /**
* http://api.map.baidu.com/telematics/v3/weather?location=北京&output=xml&ak=
* mXBIDrvTOwwmYaTtN03Lo0j2 请求上述接口,使用pull解析<date>字段和<dayPictureUrl>字段,并把
* <dayPictureUrl>字段对应的图片下载到本地, 展示到jsp页面
*
* @author my
*
*/
class WeatherDate {
private String date;
private String dayPictureUrl; public String getdate() {
return date;
} public void setdate(String date) {
this.date = date;
} public String getDayPictureUrl() {
return dayPictureUrl;
} public void setDayPictureUrl(String dayPictureUrl) {
this.dayPictureUrl = dayPictureUrl;
} @Override
public String toString() {
return "WeatherDate [date=" + date + ", dayPictureUrl=" + dayPictureUrl + "]";
} } public class parserDemo {
public static void main(String[] args) {
String xml = HttpUtils.getXMLByInternet(
"http://api.map.baidu.com/telematics/v3/weather?location=北京&output=xml&ak=mXBIDrvTOwwmYaTtN03Lo0j2");
System.out.println(xml);
try {
// 创建解析器工厂对象
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
// 创建解析器
XmlPullParser parser = factory.newPullParser();
// 设置数据源,
       //StringReader 是Reader的子类
       // StringReader 的数据源是String类型的字符串
         parser.setInput(new StringReader(xml));
// 得到响应码
int code = parser.getEventType();
WeatherDate weatherDate = null;
List<WeatherDate> list = null;
String temp = "";
while (code != XmlPullParser.END_DOCUMENT) {
String name = parser.getName();
switch (code) {
case XmlPullParser.START_TAG:
if ("weather_data".equals(name)) {
list = new ArrayList<>();
temp = "weather";
} else if ("date".equals(name) && "weather".equals(temp)) {
weatherDate = new WeatherDate();
weatherDate.setdate(parser.nextText());
} else if ("dayPictureUrl".equals(name)) {
String path = parser.nextText();
weatherDate.setDayPictureUrl(path);
list.add(weatherDate);
// 下载图片
HttpUtils.downLoadImg(path);
}
break;
default:
break;
}
code = parser.next();
}
for (WeatherDate weatherDate2 : list) {
System.out.println(weatherDate2);
} } catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
}

XMl解析之Pull解析的更多相关文章

  1. 非常简单的XML解析(SAX解析、pull解析)

    这里只是把解析的数据当日志打出来了 非常简单的xml解析方式 package com.example.demo.service; import java.io.IOException; import ...

  2. XML 序列化与PULL解析

    简介 Pull解析XML XmlPullParser解析器的运行方式与SAX解析器相似.它提供了类似的事件(开始元素和结束元素),但需要使用parser.next()方法来提取它们.事件将作为数值代码 ...

  3. Xml解析之PULL解析 例1

    <?xml version="1.0" encoding="UTF-8"?> <persons> <person id=" ...

  4. Xml解析之PULL解析 例2

    <?xml version="1.0" encoding="UTF-8"?> <books> <book id="100 ...

  5. Android之Pull解析XML

    一.Pull解析方法介绍 除了可以使用SAX和DOM解析XML文件,也可以使用Android内置的Pull解析器解析XML文件.Pull解析器的运行方式与SAX解析器相似.它也是事件触发的.Pull解 ...

  6. Android pull解析xml文件

    本文介绍android中使用pull来解析xml文件 先自己写一个xml文件,存一些天气信息 <?xml version="1.0" encoding="UTF-8 ...

  7. 安卓使用pull解析器解析XML文件

    学习一下: public class MainActivity extends Activity { List<City> cityList; @Override protected vo ...

  8. XML解析之PULL

    在Android中极力推荐的xmlpull方式解析xml. 为什么 STAX 解析方式 效率 好于 SAX ? 1.SAX 无选择性的,所有事件都会处理 解析方式,Stax 由用户控制需要处理事件类型 ...

  9. pull解析xml文件

    pull解析xml文件 先自己写一个xml文件,存一些天气信息 拿到xml文件 InputStream is = getClassLoader().getResourceAsStream(" ...

随机推荐

  1. HDU 5622 KK's Chemical DP

    题意:bc round 71(中文题面) 分析(官方题解): 根据药品之间的相互关系,我们可以构建一张图,我们对相互会发生反应的药品连边 这个图的特征,是一个环加上一些“树”(可能有多个联通块) 一个 ...

  2. PC端使用opencv获取webcam,通过socket把Mat图像传输到android手机端

    demo效果图: PC端 android端 大体流程 android端是服务器端,绑定IP和端口,监听来自PC端的连接, pc端通过socket与服务器andorid端传输图片. 主要代码 andro ...

  3. 基于QT的一个简易的安防

    工程描述 opencv2.4.8 QT5 背景建模后,当有异物入侵时,把入侵的帧写到视频文件 使用BackgroundSubtractorMOG2背景建模 程序基于QT对话框 .pro #------ ...

  4. js基础第六天

    获取节点属性 getAttribute("属性") 获取属性 setAttribute("属性","值"); 设置节点属性 删除某个属性 r ...

  5. 怎么解决div覆盖内容却没覆盖的问题?

    一.在上下结构的div布局中,可能出现div覆盖div,但是内容却没有出现覆盖的现象.看看一个示例 1: <!DOCTYPE html> 2: <html> 3: <he ...

  6. shark错误:Query returned non-zero code: -101

      环境:shark(0.11分支编译)+spark 0.8+hive 0.11(编译)+hadoop 2.00 cdh4.4 用sharkserver的方式执行一段时间后,通过kit-b8连接到ki ...

  7. 编译vo-aacenc遇到的问题

    sourceforge更新了vo-aacenc到0.1.3,就把自己的编码器也更新到最新.编译过程中无聊多测试了一下 发现一个小问题http://sourceforge.net/projects/op ...

  8. Xcode5和ios7下交叉编译ffmpeg

    先申明本机环境 dev-mini:ffmpeg devone$ sw_vers  ProductName:    Mac OS X ProductVersion:  BuildVersion:   1 ...

  9. Barcode記錄

    .net開源框架 Barcode Rendering Framework URL:http://barcoderender.codeplex.com/releases/view/91902 可產生BR ...

  10. 第十三章、学习 Shell Scripts 循环 (loop)

    while do done, until do done (不定循环) while [ condition ] <==中括号内的状态就是判断式 do <==do 是回圈的开始! 程序段落 ...