2012-01-01 3 views
11

Я пытаюсь использовать SimpleXML для загрузки удаленного URL-адреса.Использование SimpleXML для загрузки удаленного URL-адреса

Если я ввожу в свой браузер следующее:

http://api.ean.com/ean-services/rs/hotel/v3/list?cid=55505&minorRev=12&apiKey=2hkhej72gxyas3ky6hhjtsga&locale=en_US&currencyCode=USD&customerIpAddress=10.184.2.9&customerUserAgent=Mozilla/5.0+(Windows;+U;+Windows+NT+6.1;+en-US;+rv:1.9.2.25)+Gecko/20111212+Firefox/3.6.25&customerSessionId=&xml=<HotelListRequest><arrivalDate>01/22/2012</arrivalDate><departureDate>01/24/2012</departureDate><RoomGroup><Room><numberOfAdults>1</numberOfAdults><numberOfChildren>1</numberOfChildren><childAges>4</childAges></Room></RoomGroup><city>Amsterdam</city><countryCode>NL</countryCode><supplierCacheTolerance>MED</supplierCacheTolerance></HotelListRequest> 

Это работает!

Если я попробую;

$url = 'http://api.ean.com/ean-services/rs/hotel/v3/list?cid=55505&minorRev=12&apiKey=2hkhej72gxyas3ky6hhjtsga&locale=en_US&currencyCode=USD&customerIpAddress=10.184.2.9&customerUserAgent=Mozilla/5.0+(Windows;+U;+Windows+NT+6.1;+en-US;+rv:1.9.2.25)+Gecko/20111212+Firefox/3.6.25&customerSessionId=&xml=<HotelListRequest><arrivalDate>01/22/2012</arrivalDate><departureDate>01/24/2012</departureDate><RoomGroup><Room><numberOfAdults>1</numberOfAdults><numberOfChildren>1</numberOfChildren><childAges>4</childAges></Room></RoomGroup><city>Amsterdam</city><countryCode>NL</countryCode><supplierCacheTolerance>MED</supplierCacheTolerance></HotelListRequest> '; 
$xml = simplexml_load_file($url); 

Я встречаюсь со следующей ошибкой;

Warning: simplexml_load_file() [function.simplexml-load-file]: http://api.ean.com/ean-services/rs/hotel/v3/list?cid=55505&minorRev=12&apiKey=2hkhej72gxyas3ky6hhjtsga&locale=en_US&currencyCode=USD&customerIpAddress=10.184.2.9&customerUserAgent=Mozilla/5.0%2B(Windows;%2BU;%2BWindows%2BNT%2B6.1;%2Ben-US;%2Brv:1.9.2.25)%2BGecko/20111212%2BFirefox/3.6.25&customerSessionId=&xml=%3CHotelListRequest%3E%3CarrivalDate%3E01/22/2012%3C/arrivalDate%3E%3CdepartureDate%3E01/24/2012%3C/departureDate%3E%3CRoomGroup%3E%3CRoom%3E%3CnumberOfAdults%3E1%3C/numberOfAdults%3E%3CnumberOfChildren%3E1%3C/numberOfChildren%3E%3CchildAges%3E4%3C/childAges%3E%3C/Room%3E%3C/RoomGroup%3E%3Ccity%3EAmsterdam%3C/city%3E%3CcountryCode%3ENL%3C/countryCode%3E%3CsupplierCacheTolerance%3EMED%3C/supplierCacheTolerance%3E%3C/HotelListRequest%3E%20:1: parser error : Start tag expected, '<' not found in C:\Program Files\XAMPP\xampplite\htdocs\hotel\results.php on line 29 

Наиболее примечательная часть этой ошибки: Ошибка парсера: Начальный тег ожидается, «<» не найден

Я хотел бы доступ к этому файлу и использовать PHP/SimpleXML для форматирования результатов - Но пока я застрял.

Я думал, что эта нить HERE, которая рассказывает о rawurlencode, возможно, помогла, но это не так, либо это, либо я чего-то не хватает.

ответ

30

Результаты возвращаются как json. Замените simplexml_load_file на json_decode, и вы увидите правильный объект.

Если вы хотите использовать xml, вам нужно указать его в заголовках. Следующий код будет возвращать правильный XML:

$context = stream_context_create(array('http' => array('header' => 'Accept: application/xml'))); 
$url = 'http://api.ean.com/ean-services/rs/hotel/v3/list?cid=55505&minorRev=12&apiKey=2hkhej72gxyas3ky6hhjtsga&locale=en_US&currencyCode=USD&customerIpAddress=10.184.2.9&customerSessionId=&xml=<HotelListRequest><arrivalDate>01/22/2012</arrivalDate><departureDate>01/24/2012</departureDate><RoomGroup><Room><numberOfAdults>1</numberOfAdults><numberOfChildren>1</numberOfChildren><childAges>4</childAges></Room></RoomGroup><city>Amsterdam</city><countryCode>NL</countryCode><supplierCacheTolerance>MED</supplierCacheTolerance></HotelListRequest> '; 

$xml = file_get_contents($url, false, $context); 
$xml = simplexml_load_string($xml); 
print_r($xml); 
?> 
+0

Спасибо, что, кажется, возвращает массив, но вы можете сказать мне, что это о том, что URL, что делает его JSON, как это выглядит, как XML для меня, а также то, что было бы примером работы с данными, которые возвращаются из приведенного выше; т.е. echo $ xml-> hotelId [1]; или что-то вроде похожего? Спасибо за вашу помощь. – Wordpressing

+1

В URL-адресе не указано кодирование - его заголовок Accept, который дозирует. Ваш пример в значительной степени относится к правильному trac, но вы должны использовать отдельный вопрос для части объекта XML XML. Пожалуйста, не забудьте принять! – Mbrevda

+0

Хорошо, что имеет для меня больше смысла, спасибо за вашу помощь! – Wordpressing

Смежные вопросы