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. HDU4289 Control 最大流

    经典题,求去掉若干个点,使得两个点不在连通,总价值最少 所以拆点最小割,除了拆点边,流量都为无穷,拆点边是流量为价值 #include <iostream> #include <cs ...

  2. QT中使用 slot 传递 opencv 中得Mat对象以及 使用多线程集成开源代码。

    关于 slot传递 Mat 对象 以前一直是使用 Qtimer 定时器,设定超时后读取 dialog 对象的 Mat成员实现在 UI 里显示图像,发现这样对以后集成其他面向过程的代码增加了复杂度. 所 ...

  3. shell管道和重定向

    看了前面一节:linux shell数据重定向(输入重定向与输出重定向)详细分析 估计还有一些朋友是头晕晕的,好复杂的重定向了.这次我们看下管道命令了.shell管道,可以说用法就简单多了. 管道命令 ...

  4. C#通过DllImport引入dll中的C++非托管类(转)

    http://blog.sina.com.cn/s/blog_70a144580100tmj8.html

  5. js onchange事件

    因为onchange在属性值改变时还必须使得当前元素失去焦点(onblur)才可以激活该事件. 如果你需要即时监听输入框值的变化,建议使用 onpropertychange 事件! 在IE下,当一个H ...

  6. asp.net(C#) 中 怎么使用 MongoDb

    1. 先引用以下Dll(如果找不到 到gethub上下载源代码自己编译 特别是MongoDB.Driver.Legacy.dll 我自己找了半天没找到): MongoDB.Bson.dll Mongo ...

  7. POJ 2749--Building roads(2-SAT)

    题意:John有n个牛棚,每个牛棚都住着一些牛,这些牛喜欢串门(drop around, 学到了...),所以John想要建几条路把他们连接起来.他选择的方法是建两个相连中转站,然后每个牛棚连接其中一 ...

  8. 获取EXe版本信息

    function GetVersionString(FileName: string): string;    var    VerInfoSize: DWORD;    VerInfo: Point ...

  9. IOS多线程知识总结/队列概念/GCD/主队列/并行队列/全局队列/主队列/串行队列/同步任务/异步任务区别(附代码)

    进程:正在进行中的程序被称为进程,负责程序运行的内存分配;每一个进程都有自己独立的虚拟内存空间 线程:线程是进程中一个独立的执行路径(控制单元);一个进程中至少包含一条线程,即主线程 队列 dispa ...

  10. 如何获得网页上的swf视频教程文件?

    网上有很多免费的视频教程,但有的视频教程这能在线观看,无法离线下在,如何获得网页上的swf视频教程文件呢? 我问以"我要自学网"的视频教程为例进行讲解.这是一个我要自学网的PS视频 ...