我正在尝试从Google地理编码API获取xml响应。你可以通过浏览器到下面的链接看到xml响应正常工作。但是我的Document.parse()会返回一个空文档,当打印响应实体的contentLength时我得到-1。 我发送的地址的语言是希伯来语,但这似乎不是问题,因为在浏览器中响应返回正常。 任何人都可以理解发生了什么以及为什么它不按预期工作?
String url = "https://maps.googleapis.com/maps/api/geocode/xml?"
+ "address=" + URLEncoder.encode(address, "UTF-8");
HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
System.out.println(url);
HttpGet request = new HttpGet(url);
HttpResponse response = httpClient.execute(request, localContext);
System.out.println(Arrays.toString(response.getAllHeaders()));
InputStream in = response.getEntity().getContent();
DocumentBuilder builder = DocumentBuilderFactory.newInstance()
.newDocumentBuilder();
doc = builder.parse(in);
System.out.println(doc.getTextContent());
return doc;
我的照片是(您可以检查链接的有效性):
https://maps.googleapis.com/maps/api/geocode/xml?address=%D7%94%D7%A2%D7%9C%D7%99%D7%94+%D7%94%D7%A9%D7%A0%D7%99%D7%94+20+%D7%90%D7%96%D7%95%D7%A8
[Content-Type: application/xml; charset=UTF-8, Date: Mon, 03 Nov 2014 19:20:50 GMT, Expires: Tue, 04 Nov 2014 19:20:50 GMT, Cache-Control: public, max-age=86400, Vary: Accept-Language, Access-Control-Allow-Origin: *, Server: mafe, X-XSS-Protection: 1; mode=block, X-Frame-Options: SAMEORIGIN, Alternate-Protocol: 443:quic,p=0.01, Transfer-Encoding: chunked]
null
答案 0 :(得分:1)
好消息是你的doc似乎不是null。试试getFirstChild或类似的东西。 GetTextContent将失败,因为根元素很可能没有文本作为值。
答案 1 :(得分:0)
好的,只是回答我自己的问题
我最终使用
EntityUtils.toString(response.getEntity())
并将respone类型更改为json,因此我仍然无法理解为什么document.parse()工作得不好,因为使用上面的行仍然请求xml它返回正确的字符串