#php #xml #parsing #curl
#php #xml #синтаксический анализ #curl
Вопрос:
У меня возникли проблемы со следующим php-кодом:
<?php
$url = "http://api.ean.com/ean-services/rs/hotel/v3/list? minorRev=1amp;cid=55505amp;apiKey=58x5kuujub8xbb5tzv3a2a8qamp;locale=en_USamp;currencyCode=USDamp;xml= <HotelListRequest><destinationString>Seattle</destinationString> <arrivalDate>08/01/2011</arrivalDate><departureDate>08/03/2011</departureDate><RoomGroup> <Room><numberOfAdults>2</numberOfAdults></Room></RoomGroup> <numberOfResults>1</numberOfResults></HotelListRequest>";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
$contents = curl_exec ($ch);
echo $contents;
curl_close($ch);
?>
Проблема в том, что $ contents содержит разметку, которая вообще не является XML, поэтому я не могу ее разобрать. Это сбивает с толку, потому что при вводе URL-адреса в адресной строке моего браузера будет отображаться XML-документ, но, похоже, я не могу получить действительный XML-документ с этим кодом.
Вот фрагмент строки, которая возвращается:
{"HotelListResponse":{"customerSessionId":"0ABAA83D-4428-4913-0382-28FBB1901EFC","numberOfRoomsRequested":1,"moreResultsAvailable":true,"cacheKey":"-32344284:1303828fbb1:-1ef9","cacheLocation":"10.186.168.61:7305","HotelList":{"@size":"1","HotelSummary":{"@order":"0"
Может кто-нибудь объяснить мне, где я ошибаюсь?
Спасибо.
Ответ №1:
Вместо того, чтобы пытаться получить XML, который может быть не предоставлен, вы всегда можете работать с тем, что у вас есть, которое, по-видимому, является JSON.
$response = json_decode( $contents, true );
Это даст вам ассоциативный массив ваших данных, с которым может быть намного проще работать.
Ответ №2:
Попробуйте удалить пробелы: «/v3/list? minorRev=1» -> «/v3/list?minorRev=1»
-
Сделайте свой URL правильным, например
$url = 'http://api.ean.com/ean-services/rs/hotel/v3/list?type=xmlamp;minorRev=1amp;cid=55505amp;apiKey=58x5kuujub8xbb5tzv3a2a8qamp;locale=en_USamp;currencyCode=USDamp;xml=Seattle08/01/201108/03/20112 1';
-
Добавьте опцию для приема только xml — в браузере у нас есть такой заголовок — в curl — нет:
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/xml'));
-
ПРИБЫЛЬ!!!
Комментарии:
1. Ты гений! Вы решили мою главную проблему, большое вам спасибо!
2. @liveandream tnx, просто нажмите эту кнопку «Вверх» 🙂