通过Java下载XML文件给我一个JSON文件

时间:2014-10-23 22:19:04

标签: java xml json

我一直在尝试通过Java从这个链接下载以下XML文件:

https://api.eancdn.com/ean-services/rs/hotel/v3/list?cid=55505&minorRev=99&apiKey=bj6f8z64bnmn35hczeasbuut&locale=en_US&currencyCode=USD&xml=%3CHotelListRequest%3E%0A%20%20%20%20%3Ccity%3ESeattle%3C%2Fcity%3E%0A%20%20%20%20%3CstateProvinceCode%3EWA%3C%2FstateProvinceCode%3E%0A%20%20%20%20%3CcountryCode%3EUS%3C%2FcountryCode%3E%0A%20%20%20%20%3CarrivalDate%3E11%2F22%2F2014%3C%2FarrivalDate%3E%0A%20%20%20%20%3CdepartureDate%3E11%2F24%2F2014%3C%2FdepartureDate%3E%0A%20%20%20%20%3CRoomGroup%3E%0A%20%20%20%20%20%20%20%20%3CRoom%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3CnumberOfAdults%3E2%3C%2FnumberOfAdults%3E%0A%20%20%20%20%20%20%20%20%3C%2FRoom%3E%0A%20%20%20%20%3C%2FRoomGroup%3E%0A%20%20%20%20%3CnumberOfResults%3E25%3C%2FnumberOfResults%3E%0A%3C%2FHotelListRequest%3E

但问题是,当我使用java代码(内置或外置)下载文件时,我得到的是JSON文件而不是XML文件,尽管我通常可以将它作为XML从Chrome下载。

我正在使用的代码:

URL url= new URL("https://api.eancdn.com/ean-services/rs/hotel/v3/list?cid=55505&minorRev=99&apiKey=bj6f8z64bnmn35hczeasbuut&locale=en_US&currencyCode=USD&xml=%3CHotelListRequest%3E%0A%20%20%20%20%3Ccity%3ESeattle%3C%2Fcity%3E%0A%20%20%20%20%3CstateProvinceCode%3EWA%3C%2FstateProvinceCode%3E%0A%20%20%20%20%3CcountryCode%3EUS%3C%2FcountryCode%3E%0A%20%20%20%20%3CarrivalDate%3E11%2F22%2F2014%3C%2FarrivalDate%3E%0A%20%20%20%20%3CdepartureDate%3E11%2F24%2F2014%3C%2FdepartureDate%3E%0A%20%20%20%20%3CRoomGroup%3E%0A%20%20%20%20%20%20%20%20%3CRoom%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3CnumberOfAdults%3E2%3C%2FnumberOfAdults%3E%0A%20%20%20%20%20%20%20%20%3C%2FRoom%3E%0A%20%20%20%20%3C%2FRoomGroup%3E%0A%20%20%20%20%3CnumberOfResults%3E25%3C%2FnumberOfResults%3E%0A%3C%2FHotelListRequest%3E") ;


      File sa= new File("C:\\Users\\Ramcos\\Desktop\\akaletc.xml");
    org.apache.commons.io.FileUtils.copyURLToFile(url, sa); 

4 个答案:

答案 0 :(得分:2)

您需要将“accept”http标头设置为“application / xml”。可能是服务器将其默认为json,但是您的浏览器将其默认为xml。

答案 1 :(得分:0)

在android中我们使用类似的东西:

DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(method);

/* headers */
httppost.setHeader("Accept", "application/xml");
httppost.setHeader("Content-Type", "application/xml");

答案 2 :(得分:0)

服务器定制其对Accept HTTP标头中的内容的响应。如果您没有说您的客户端接受XML,则服务器将回退到JSOIN

如果将Accept标头设置为application/xml,则服务器将返回XML。例如,如果你正在使用cURL:

curl -s -H 'Accept: application/xml' <URL>

答案 3 :(得分:0)

您可以使用URLConnection对象中可以获得的URL对象。然后,您可以使用setRequestProperty(String, String)方法设置标头。看起来应该是这样的。

URL url = new URL("that url");
URLConnection connection = url.openConnection();
connection.setRequestProperty("accept", "application/json");
connection.connect();
File sa = new File("C:\\Users\\Ramcos\\Desktop\\akaletc.xml");
org.apache.commons.io.IOUtils.copy(connection.getInputStream(), new FileOutputStream(sa));