您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

java解析Response中XML

2024/11/5 11:42:30发布17次查看
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 map = new hashmap(); 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 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
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product