package org.main; import java.io.BufferedWriter; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStreamWriter; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.zip.GZIPInputStream; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class Demo { public static GZIPInputStream getReponse(String _url) throws ClientProtocolException, IOException { DefaultHttpClient httpclient = new DefaultHttpClient(); HttpGet httpget = new HttpGet(_url); HttpResponse response = httpclient.execute(httpget); HttpEntity entity = response.getEntity(); InputStream inputs=entity.getContent(); GZIPInputStream in = new GZIPInputStream(inputs); return in; } @SuppressWarnings("rawtypes") public static void main(String[] args) throws Exception { Map<String, String> map = new HashMap<String, String>(); SAXReader reader = new SAXReader(); Document document = reader.read(getReponse("http://wthrcdn.etouch.cn/WeatherApi?city=%E9%95%BF%E6%98%A5")); // 得到xml根元素 Element root = document.getRootElement(); // 得到根元素的所有子节点 List<Element> elementList = root.elements(); Iterator forecast = root.elementIterator("forecast"); if (forecast.hasNext()) { Element recordEless = (Element) forecast.next(); Iterator weather = recordEless.elementIterator("weather"); Element weatherNode = (Element) weather.next(); System.out.println(); System.out.println("date" + ":" + weatherNode.elementTextTrim("date")); System.out.println("high" + ":" + weatherNode.elementTextTrim("high")); System.out.println("low" + ":" + weatherNode.elementTextTrim("low")); Iterator weatherNodeChild = weatherNode.elementIterator("day"); Element dayNode = (Element) weatherNodeChild.next(); System.out.println(); System.out.println("type" + ":" + dayNode.elementTextTrim("type")); System.out.println("fengxiang" + ":" + dayNode.elementTextTrim("fengxiang")); System.out.println("fengli" + ":" + dayNode.elementTextTrim("fengli")); } Iterator zhishus = root.elementIterator("zhishus"); while(zhishus.hasNext()) { Element zhishusNode = (Element) zhishus.next(); Iterator zhishu = zhishusNode.elementIterator("zhishu"); while(zhishu.hasNext()) { Element zhishuNode = (Element) zhishu.next(); System.out.println(); System.out.println("name" + ":" + zhishuNode.elementTextTrim("name")); System.out.println("value" + ":" + zhishuNode.elementTextTrim("value")); System.out.println("detail" + ":" + zhishuNode.elementTextTrim("detail")); } } } }
最近给一个公众平台做一个天气查询的功能,原理就是从接口获取数据然后返回给用户。这里使用的接口返回的是xml类型的数据。于是使用dom4j解析。
本来想着使用Document document = reader.read();
然后他的参数是一个input流,就想着如何把get请求到的resp转换为流,也上网查了一些相关资料,发现比较扯,,,自己搞吧... 先从
HttpGet httpget = new HttpGet(_url); HttpResponse response = httpclient.execute(httpget); HttpEntity entity = response.getEntity(); InputStream inputs=entity.getContent();
这里得到resp的返回流,直接传给reader.read();方法,发现报错说是编码错误。。。一脸懵逼,因为直接通过浏览器访问就是utf-8编码啊,卧槽什么鬼。。。
后来使用entity.getContentEncoding() 打印 发现是返回流是gzip编码......Ri...
使用java自带的解压解一下压就好了....
GZIPInputStream in = new GZIPInputStream(inputs);
本文出自 “TheAuroraSec” 博客,请务必保留此出处http://aurorasec.blog.51cto.com/9752323/1859599

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

Atom编辑器mac版下载
最流行的的开源编辑器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

Dreamweaver CS6
视觉化网页开发工具

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),