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. [Bhatia.Matrix Analysis.Solutions to Exercises and Problems]ExI.3.1

    Let $A=A_1\oplus A_2$. Show that (1). $W(A)$ is the convex hull of $W(A_1)$ and $W(A_2)$; i.e., the ...

  2. Java HashMap存储问题

    public static boolean isIsomorphic(String s, String t) { Map map1 = new HashMap<>(); Map map2 ...

  3. js基础第七天

    短信发送验证倒计时案例(常用) 关闭定时器clearInterval this 指向的是 事件的调用者 ,或者是函数的使用者. button 不可以用 disabled 不可用的意思 意思是变成灰色不 ...

  4. [原]AngularJS iframe打开不同域的内容时报错误

    <iframe id="myFrame" ng-src="{{url}}" width="100%" height="100 ...

  5. Python中的导入

    转自:http://bingotree.cn/?p=569 参考<Python学习手册>,强烈建议看下这本书的相关章节. 在一些规模较大的项目中,经常可以看到通过imp.__import_ ...

  6. Android-Native-Server 启动和注册详细分析

    Android-Native-Server 启动和注册详细分析     以mediaService为实例来讲解: mediaService的启动入口 是一个 传统的  main()函数 源码位置E:\ ...

  7. [C++]Microsoft Visual Studio (VS)2010 常用快捷键大全

    VAssistX快捷键 Ctrll+Shift+S   快速查找函数位置  VAssistX提供 Shift+Alt+O     快速查找打开单元  VAssistX提供 Alt+O         ...

  8. SQL中EXISTS的用法和效率

    比如在Northwind数据库中有一个查询为SELECT c.CustomerId,CompanyName FROM Customers cWHERE EXISTS(SELECT OrderID FR ...

  9. Java远程方法调用(RMI)

    Java RMI 指的是远程方法调用 (Remote Method Invocation).它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法.可以用此方 ...

  10. (转)java读取数据库表信息,子段

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sq ...