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. 16、传感器(Sensor)

    一.什么是传感器 传感器是一种物理装置或生物器官,能够探测.感受外界的信号.物理条件(如光.热.湿度)或化学组成(如烟雾),并将探知的信息传递给其他装置或器官.国家标准GB7665—87对传感器的定义 ...

  2. 初次接触Object对象变量

    Object 变量存储为 32 位(4 个字节)的地址形式,其为对象的引用.利用 Set 语句,声明为 Object 的变量可以赋值为任何对象的引用. 第一次注意到还有个数据类型,帮助文件里只有上面这 ...

  3. 【转】java list用法示例详解

    转自:http://www.jb51.net/article/45660.htm java中可变数组的原理就是不断的创建新的数组,将原数组加到新的数组中,下文对java list用法做了详解. Lis ...

  4. IO 图

  5. [原][Android]All WebView methods must be called on the same thread.

    问题 webView调用JS出错. class TestJS {         ......         public TestJS(){         }                   ...

  6. Spark系列(四)整体架构分析

    架构流程图 说明  Driver端流程说明(Standalone模式) 使用spark-submit提交Spark应用程序Application. 通过反射的方式创建和构造一个DriverActor进 ...

  7. build-your-first-mobile-app(第一个 PhoneGap cordova Coldfusion App)

    摘自:http://www.adobe.com/devnet/coldfusion/articles/build-your-first-mobile-app.html Introduction Use ...

  8. 11个高级MySQL数据库面试问题和答案

    因为有大家的支持,我们才能做到现在,感谢你们这一路上对我们的支持.在这篇文章中,我们将主要针对MySQL的实用技巧,讲讲面试中相关的问题. 1. 如何使用SELECT语句找到你正在运行的服务器的版本并 ...

  9. 你所不知道的五件事情--java.util.concurrent(第二部分)

    这是Ted Neward在IBM developerWorks中5 things系列文章中的一篇,仍然讲述了关于Java并发集合API的一些应用窍门,值得大家学习.(2010.06.17最后更新) 摘 ...

  10. 推荐《C Primer Plus(第五版)中文版》【worldsing笔记】

      老外写的C书,看了你会有一种哇塞的感觉,这里提供PDF扫描版的下在,包含数内的例程,请大家支持原版!! C Primer Plus(第五版)中文版.pdf  下载地址:http://pan.bai ...